如何使batch file按顺序执行多个(Python)脚本,每个脚本都在自己的窗口中,并在完成后保持所有这些窗口打开? 现在,我的批处理是这样的:
python script1 start python script2 pause/cmd
但只有父窗口保持打开。
谢谢。
环境:Windows XP / Vista
按顺序执行多个(Python)脚本,每个脚本都在自己的窗口中,并在完成时保持所有这些窗口打开
#!/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()
它可以在命令行上提供尽可能多的脚本和参数。
如果你不使用脚本的参数, 你可以简化使用:
$ python cps.py script1.py script2.py script3.py
注意:不在脚本之间。 在这种情况下,您需要修改代码:
end = 2
rest = sys.argv[end:]
(注意:不是+1
) 如果你只有两个脚本,你有正确的想法,只是你的语法错了:
start cmd.exe /k "python script1.py & start cmd.exe /k python script2.py"
如果你需要窗口标题:
start "Window1" cmd.exe /K "python script1.py & start "window2" cmd.exe /K python script2.py"
任何两个以上的脚本,你将不得不求助于棘手的东西。 下面的.cmd文件将做的伎俩:
@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
这可以扩展到任意数量的脚本或命令,脚本的任意参数等等。如果您希望cmd窗口只是暂停,并在按下按键时消失:
@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
如果你想让他们全部在最后一个窗口按下一个键即可终止:
@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
所以,你有很多脚本行为的选择。
您可以使用start
命令打开一个新窗口(在/min
的后台)并运行一个命令
start "window1" /min cmd.exe /c "pause"
最后的命令,暂停可以是任何东西,只要一定把它全部引用
要使窗口保持打开状态,应该将内容放在带有暂停的批处理脚本中作为最后一个语句