2010-07-07 14 views

Respuesta

14

Podría considerar ejecutar el programa a través de subprocess.Popen, con subprocess.PIPE comunicación, y luego empujar esa salida donde quiera, pero como está, os.system solo ejecuta el comando, y nada más.

from subprocess import Popen, PIPE 

p = Popen(['command', 'and', 'args'], stdout=PIPE, stderr=PIPE, stdin=PIPE) 

output = p.stdout.read() 
p.stdin.write(input) 

Mucho más flexible en mi opinión. Es posible que desee mirar la documentación completa: Python Subprocess module

+0

Mmm ... está bien. Entonces, ¿el comando se ejecuta en la línea P = Popen (...), sí? Y solo mostrará la salida al llamar a p.stdout.read() ... yes? Gracias –

+0

Bien ... los comandos se ejecutaron, pero en un hilo separado. ¿Hay alguna forma de que pueda invocar el programa mientras se ejecutan los comandos o mantenerlo en el mismo hilo? Gracias. –

+2

Simplemente, use p.wait(). Sin embargo, aparentemente esto puede provocar el bloqueo cuando se usa PIPE stdout si el programa genera suficiente salida. Consulte la documentación completa en http://docs.python.org/library/subprocess.html#subprocess.Popen.wait. Sin embargo, creo que debería funcionar ... –

0

redirige stderr así como stdout.

+1

que no hacen la cita de trabajo de http://docs.python.org/library/os.html#process-management os.system (comando) Ejecute el comando (una cadena) en una subcadena. Esto se implementa llamando al sistema de función estándar C() y tiene las mismas limitaciones. Los cambios en sys.stdin, etc. no se reflejan en el entorno del comando ejecutado. –

12

En un sistema unix, puede redirigir stderr y stdout a/dev/null como parte del comando.

os.system(cmd + "> /dev/null 2>&1") 
+1

Eso funciona solo en un sistema Unix –

+0

Sí, correcto. Respuesta actualizada para evitar confusiones. – ealdent

0

Si desea eliminar por completo la consola que pone en marcha con el programa de pitón, puede guardarlo con la extensión .pyw.

Sin embargo, es posible que esté malinterpretando la pregunta.

Cuestiones relacionadas