从批处理中保持多个控制台窗口打开

2024-04-26 13:46:03 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使批处理文件按顺序执行多个(Python)脚本,每个脚本都在各自的窗口中,并在完成时保持所有这些窗口打开?现在,我的批处理是这样的:

python script1
start python script2
pause/cmd

但只有父窗口保持打开状态。在

谢谢。在

环境: Windows XP/Vista


Tags: 文件脚本cmd环境顺序windows状态start
3条回答

您可以使用start命令打开一个新窗口(在后台使用/min)并运行一个命令

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

最后一个命令,pause可以是任何东西,只需确保将其全部加上引号

要使窗口保持打开状态,应将内容放在批处理脚本中,最后一个语句是pause

如果您只有两个脚本,那么您的想法是正确的,只是语法错误:

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

如果需要窗口标题:

^{pr2}$

任何超过两个脚本,你将不得不求助于更棘手的东西。下面的.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

所以,对于脚本的行为有很多选择。在

[to] execute multiple (Python) scripts sequentially, each in their own window, and keep all those windows open upon completion

#!/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()

它支持尽可能多的脚本及其参数,您可以在命令行上提供这些脚本的参数。在

如果不为脚本使用参数,则可以简化用法:

^{pr2}$

注意:脚本之间没有。在这种情况下,您需要修改代码:

  • 设置end = 2
  • rest = sys.argv[end:](注:否+1

相关问题 更多 >