En Linux, el comando ps aux muestra una lista de procesos con múltiples columnas para cada estadística. p.ej.División de la salida de ps utilizando Python
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
...
postfix 22611 0.0 0.2 54136 2544 ? S 15:26 0:00 pickup -l -t fifo -u
apache 22920 0.0 1.5 198340 16588 ? S 09:58 0:05 /usr/sbin/httpd
Quiero ser capaz de leer esto en el uso de Python y dividir a cabo cada fila y cada columna a continuación, para que puedan ser utilizados como valores.
En su mayor parte, esto no es un problema:
ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0]
processes = ps.split('\n')
ahora puedo bucle a través de los procesos para conseguir cada fila, que se dividió a cabo por espacios, por ejemplo
sep = re.compile('[\s]+')
for row in processes:
print sep.split(row)
Sin embargo, el problema es que la última columna, el comando, a veces tiene espacios en. En el ejemplo anterior, esto se puede ver en el comando
pickup -l -t fifo -u
el que se dividiría como
['postfix', '22611', '0.0', '0.2', '54136', '2544', '?', 'S', '15:26', '0:00', 'pickup', '-l', '-t', 'fifo', '-u']
pero realmente quiero como:
['postfix', '22611', '0.0', '0.2', '54136', '2544', '?', 'S', '15:26', '0:00', 'pickup -l -t fifo -u']
Así que mi pregunta es, ¿cómo puedo dividir las columnas, pero cuando se trata de la columna de mando, mantener toda la cadena como un elemento de lista en lugar de dividir por espacios?
no hacen eso. La salida ps está ** NO ** destinada a ser legible por máquina. O explota esta información en el sistema de archivos/proc o usa PSI, como sugiere vartec. – Juliano
¿Por qué no se supone que sea legible por máquina? – DavidM
David, creo que Juliano simplemente quiere decir que la salida PS varía tanto (como usted señaló, la secuencia de comandos se divide en muchas partes por su expresión regular y no hay forma de que el programa sepa que esto es indeseable) que sería más fácil para usted usar/proc fs o PSI. No es que sea * NO MÁQUINA LECTURA * es que será un dolor hacerlo. – sholsapp