mantener múltiples ventanas de consola abiertas de lote

¿Cómo puedo hacer que un archivo por lotes ejecute varios scripts (Python) de forma secuencial, cada uno en su propia ventana, y mantener todas esas ventanas abiertas al finalizar? En este momento, mi lote es algo como:

python script1 start python script2 pause/cmd 

Pero solo la ventana principal permanece abierta.

Gracias.

Entorno: Windows XP / Vista

[para] ejecutar múltiples secuencias de comandos (Python) secuencialmente, cada una en su propia ventana, y mantener todas esas ventanas abiertas al finalizar

 #!/usr/bin/env python """Continuation-passing style (CPS) script. Usage: $ python cps.py script1.py arg1 arg2 -- script2.py abc -- script3.py ... """ import platform import sys from subprocess import call if len(sys.argv) < 2: sys.exit() # nothing to do # define a command that starts new terminal if platform.system() == "Windows": new_window_command = "cmd.exe /c start cmd.exe /c".split() else: #XXX this can be made more portable new_window_command = "x-terminal-emulator -e".split() # find where script args end end = sys.argv.index('--') if '--' in sys.argv else len(sys.argv) # call script; wait while it ends; ignore errors call([sys.executable] + sys.argv[1:end]) # start new window; call itself; pass the rest; ignore errors rest = sys.argv[end+1:] if rest: call(new_window_command + [sys.executable, sys.argv[0]] + rest) print("Press Enter to exit") #NOTE: to avoid raw_input/input py3k shenanigans sys.stdin.readline() 

Admite tantos scripts con sus argumentos como pueda proporcionar en la línea de comandos.

Si no utiliza argumentos para scripts; Podrías simplificar el uso:

 $ python cps.py script1.py script2.py script3.py 

Nota: no -- entre guiones. Necesitas modificar el código en este caso:

  • set end = 2
  • y rest = sys.argv[end:] (Nota: no +1 )

Si solo tiene dos secuencias de comandos, tuvo la idea correcta, simplemente se equivocó en la syntax:

 start cmd.exe /k "python script1.py & start cmd.exe /k python script2.py" 

Si necesita títulos de ventana:

 start "Window1" cmd.exe /K "python script1.py & start "window2" cmd.exe /K python script2.py" 

Más de dos scripts, y tendrás que recurrir a cosas más complicadas. El siguiente archivo .cmd hará el truco:

 @echo off if "%~1" == "recurse" goto runScript%~2 start "Window1" cmd /k "%~f0 recurse 1" exit /b 0 :runScript1 python script1.py start "Window2" cmd /k "%~f0 recurse 2" exit /b 0 :runScript2 python script2.py start "Window3" cmd /k "%~f0 recurse 3" exit /b 0 :runScript3 python script3.py exit /b 0 

Y esto es escalable a cualquier número de secuencias de comandos o comandos, con parámetros arbitrarios a las secuencias de comandos, etc. Si desea que las ventanas de cmd se detengan y desaparezcan al presionar una tecla:

 @echo off if "%~1" == "recurse" goto runScript%~2 start "Window1" cmd /c "%~f0 recurse 1" exit /b 0 :runScript1 python script1.py start "Window2" cmd /c "%~f0 recurse 2" pause exit /b 0 :runScript2 python script2.py start "Window3" cmd /c "%~f0 recurse 3" pause exit /b 0 :runScript3 python script3.py pause exit /b 0 

Si desea que todos terminen al instante con solo presionar una tecla en la ventana final:

 @echo off if "%~1" == "recurse" goto runScript%~2 start "Window1" cmd /c "%~f0 recurse 1" exit /b 0 :runScript1 python script1.py start "Window2" /wait cmd /c "%~f0 recurse 2" exit /b 0 :runScript2 python script2.py start "Window3" /wait cmd /c "%~f0 recurse 3" exit /b 0 :runScript3 python script3.py pause exit /b 0 

Entonces, tienes muchas opciones para el comportamiento del script.

Puede usar el comando de start para abrir una nueva ventana (en segundo plano con /min ) y ejecutar un comando

 start "window1" /min cmd.exe /c "pause" 

El comando final, pausa puede ser cualquier cosa, solo asegúrese de ponerlo todo entre comillas

Para mantener una ventana abierta, debe colocar el contenido en un script por lotes con una pausa como la última statement