В Linux команда ps aux выводит список процессов с несколькими столбцами для каждой статистики. например,
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
Я хочу иметь возможность прочитать это при использовании Python и разделить каждую строку, а затем каждый столбец, чтобы их можно было использовать в качестве значений.
В большинстве случаев это не проблема:
ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0]
processes = ps.split('\n')
Теперь я могу перебирать процессы, чтобы получить каждую строку и разделить ее на пробелы, например
sep = re.compile('[\s]+')
for row in processes:
print sep.split(row)
Однако проблема в том, что в последнем столбце команды иногда есть пробелы. В приведенном выше примере это можно увидеть в команде
pickup -l -t fifo -u
который будет разделен как
['postfix', '22611', '0.0', '0.2', '54136', '2544', '?', 'S', '15:26', '0:00', 'pickup', '-l', '-t', 'fifo', '-u']
но я действительно хочу это как:
['postfix', '22611', '0.0', '0.2', '54136', '2544', '?', 'S', '15:26', '0:00', 'pickup -l -t fifo -u']
Итак, мой вопрос: как я могу разделить столбцы, но когда дело доходит до командного столбца, сохранить всю строку как один элемент списка, а не разделять пробелами?