В 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']
Итак, мой вопрос в том, как я могу разделить столбцы, но когда дело доходит до столбца команды, сохраните всю строку как один элемент списка, а не разделите ее пробелами?