2012-07-23 24 views
15

No entiendo por qué es tan difícil hacer esto en Windows.Python: inicia un nuevo símbolo del sistema en Windows y espera a que termine/salga

Quiero generar una serie de ventanas de símbolo del sistema que ejecutarán otras secuencias de comandos. La razón por la que quiero esto es para poder ver claramente todos los resultados de cada secuencia de comandos (si los tengo solo son hilos/subprocesos en la ventana principal, no puedo ver todos los resultados correctamente). Tampoco quiero registrar el resultado porque es principalmente para ver las barras de progreso, que realmente no funcionan con los archivos de registro.

partes Así individuales de mis requisitos de trabajo, pero no juntos:

os.system("start cmd /c {command here}")  # Launches in new command prompt, closes when done 

Sin embargo, el sistema OS no me deja esperar hasta que finalice el comando (desde el inicio es el comando real, el segundo se abre la nuevo símbolo del sistema es "hecho")

Del mismo modo si trato:

p = subprocess.Popen(["start", "cmd", "/k", "{command here}], shell = True) # Needs to be shell since start isn't an executable, its a shell cmd 
p.wait() # I can wait until finished (although it too finishes after start finishes) 

Entonces, ¿cómo lo hago? Leí en alguna parte que una solución podría ser usar un grupo de procesos, pero solo es unix ... o algo así

O si tiene una forma ordenada de mostrar el resultado de todos los subprocesos en una sola ventana, entonces no No es necesario abrir un nuevo símbolo del sistema y simplemente puede usar hilos. Eso también funciona, pero si tengo que decir 4 hilos descargando algo y mostrando una barra de progreso, así como generando otra información, no sé cómo mostrar eso de forma que pueda leerse (y evitar que todos choquen con El uno al otro).

PD: Esto es en Windows Vista. PPS: Preferiría una solución que funciona en Windows, Linux y Mac, me estoy enfocando en Windows por ahora pero me gustaría una solución que funcione para las tres, y sé que Windows es la más delicada. Simplemente sustituiría "el inicio cmd/c" por el comando apropiado del sistema operativo.

+0

¿Hay una razón por la que está utilizando 'inicio' vs utilizando 'cmd' como su comando? – Joe

+0

La única forma que he encontrado para abrir un nuevo símbolo del sistema, si hay otra manera que está bien – robev

Respuesta

1

¿Qué tal

os.system("cmd /c {command here}") 

O incluso

os.system("{command here}") 

Se ordena el inicio el que está poniendo en marcha una sesión separada en lugar de utilizar el mismo programa se está ejecutando en Python.

+0

Eso no inicia una nueva ventana del símbolo del sistema, sino que lo ejecuta en la ventana actual – robev

4

Puede pasar/ESPERAR al comando start para que espere la finalización.

2

Para abrir una nueva ventana de símbolo del sistema que utilizo:

os.system("start /B start cmd.exe @cmd /k mycommand...") 
Cuestiones relacionadas