Как получить исходную командную строку из процесса с помощью python?

import psutil

for p in psutil.process_iter():
    if p.name() == 'foo':
        print p.cmdline()
        print ' '.join(p.cmdline())
 
PROCESS:
   foo -p "Hello World"
RESULT:
   ['foo', '-p', 'Hello World']
   foo -p Hello World

Я хочу получить исходную командную строку для процесса, как в foo -p "Hello World", я пытался использовать cmdline(), но он предоставляет токенизированные параметры, которые меня не интересуют, и объединение их не всегда дает ожидаемый результат, как видно из второго отпечатка результата.

Есть ли способ добиться этого предпочтительно переносимым способом (возможно, используя другую библиотеку или делая это по-другому)?

РЕДАКТИРОВАТЬ

Это для сравнения с уже сохраненной командой. Другим решением моей проблемы может быть то, что просто ' '.join будет нормально, если я смогу получить статическую командную строку (foo -p "Hello World") без кавычек вокруг аргументов для сравнения. Это означает, что если бы существовала функция, выполняющая токенизацию параметров оболочки, которую выполняет psutil, это решило бы мою проблему сравнения команд.


person pepper_chico    schedule 19.01.2016    source источник
comment
@poolie в основном да, но также решение, которое просто объединяет параметры, содержащие пробелы, не будет оптимальным, я думаю, в более сложных командах.   -  person pepper_chico    schedule 20.01.2016
comment
@Rogalski, спасибо, думаю, так и должно быть.   -  person pepper_chico    schedule 20.01.2016


Ответы (2)


Использование shlex.quote соберет массив в командную строку оболочки, записав пробелы и другие специальные символы.

person poolie    schedule 19.01.2016
comment
В python 2.7 такого метода нет, я пометил вопрос как таковой, просто обновил его. - person pepper_chico; 20.01.2016

Немного поработав, вы могли бы использовать Lib/pipes в версии 2.7. https://docs.python.org/2/library/pipes.html

person Benjamin Ingmire    schedule 19.01.2016
comment
Спасибо, я принял свой вопрос как дубликат. - person pepper_chico; 20.01.2016