Tengo un comando que funciona muy bien en la línea de comandos. Tiene muchos argumentos como cmd --thing foo --stuff bar -a b input output
Usando python para ejecutar otros programas
Quiero ejecutar esto desde python y bloquear esperando a que se complete. Como el script imprime cosas en stdout
y stderr
, quiero que se muestre inmediatamente al usuario.
¿Cuál es el módulo correcto para esto?
que he probado:
import commands
output = commands.getoutput("cmd --thing foo --stuff bar -a b input output")
print output
esto funciona muy bien, excepto el stdout
no se devuelve hasta el final.
import os
os.system("cmd --thing foo --stuff bar -a b input output")
esta opción se imprime toda la salida cuando el cmd se acaba realmente.
import subprocess
subprocess.call(["cmd", "--thing foo", "--stuff bar", "-a b", "input", "output"])
esto no pasa correctamente los parámetros de alguna manera (no he sido capaz de encontrar el problema exacto, pero cmd
está rechazando mi entrada). Si pongo echo
como primer parámetro, imprime el comando que funciona perfectamente cuando lo pego directamente en el terminal.
import subprocess
subprocess.call("cmd --thing foo --stuff bar -a b input output")
exactamente el mismo que el anterior.
Solucionado. Gracias. –