Подтвердить что ты не робот

Выводить командную строку, вызываемую подпроцессом?

Я использую вызов subprocess.Popen, и в другом вопросе я узнал, что я не понял, как Python генерирует аргументы для командной строки.

Мой вопрос
Есть ли способ узнать, что такое собственно командная строка?

Пример кода: -

proc = subprocess.popen(....)
print "the commandline is %s" % proc.getCommandLine()

Как вы пишете getCommandLine?

4b9b3361

Ответ 1

Это зависит от версии используемого вами Python. В Python3.3 аргумент сохраняется в proc.args:

proc = subprocess.Popen(....)
print("the commandline is {}".format(proc.args))

В Python2.7 args не сохраняется, он просто передается на другие функции, такие как _execute_child. Итак, в этом случае лучший способ получить командную строку - сохранить ее, когда она у вас есть:

proc = subprocess.Popen(shlex.split(cmd))
print "the commandline is %s" % cmd

Обратите внимание: если у вас есть список аргументов (например, тип вещи, возвращаемый shlex.split(cmd)), вы можете восстановить строку командной строки, cmd, используя недокументированную функцию subprocess.list2cmdline:

In [14]: import subprocess

In [15]: import shlex

In [16]: cmd = 'foo -a -b --bar baz'

In [17]: shlex.split(cmd)
Out[17]: ['foo', '-a', '-b', '--bar', 'baz']

In [18]: subprocess.list2cmdline(['foo', '-a', '-b', '--bar', 'baz'])
Out[19]: 'foo -a -b --bar baz'

Ответ 2

Правильный ответ на мой вопрос заключается в том, что там нет IS нет командной строки. Точка подпроцесса заключается в том, что он делает все через IPC. List2cmdline делает все, что можно ожидать, но на самом деле лучше всего посмотреть на список "args" и просто знать, что это будет argv в вызываемой программе.