我怎样才能让一个批处理文件按顺序执行多个(Python)的脚本,各自在自己的窗口,并保持所有这些窗口完成后打开? 现在,我的批处理是一样的东西:
python script1
start python script2
pause/cmd
但是,只有在父窗口保持打开状态。
谢谢。
环境:Windows XP / Vista的
我怎样才能让一个批处理文件按顺序执行多个(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 a b c -- 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
所以,你有很多的脚本行为的选项。
You can use the start
command to open a new window (in the background with /min
) and run a command
start "window1" /min cmd.exe /c "pause"
The final command, pause can be anything, just be sure to put it all in quotes
To keep a window open, you should place the content in a batch script with a pause as the last statement