varias una salto print lista lineas linea imprimir hace escribir como agregar python command-line subprocess popen

python - una - ¿Salida la línea de comando llamada por subproceso?



salto de linea en una lista python (2)

Estoy usando el subprocess.Popen Llamada subprocess.Popen , y en otra pregunta descubrí que había estado malinterpretando cómo Python estaba generando argumentos para la línea de comandos.

Mi pregunta
¿Hay alguna manera de averiguar cuál era la línea de comando real?

Código de ejemplo: -

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

¿Cómo escribirías getCommandLine ?


Depende de la versión de Python que estés usando. En Python3.3 , el argumento se guarda en proc.args :

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

En Python2.7, los argumentos no se guardan , solo se pasan a otras funciones como _execute_child . Entonces, en ese caso, la mejor manera de obtener la línea de comandos es guardarla cuando la tenga:

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

Tenga en cuenta que si tiene la lista de argumentos (como el tipo de cosa devuelta por shlex.split(cmd) , entonces puede recuperar la cadena de línea de comandos, cmd usando la función subprocess.list2cmdline no documentada:

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''


La respuesta correcta a mi pregunta es en realidad que no hay línea de comandos. El punto del subproceso es que hace todo a través de IPC. El list2cmdline hace lo más cercano posible, pero en realidad lo mejor que puede hacer es mirar la lista de "args", y saber que eso será argv en el programa llamado.