【发布时间】:2017-10-09 11:18:38
【问题描述】:
我正在尝试使用 Python 槽 CMD 一个接一个地调用几个 install.bat 文件。
每个 bat 文件都必须显示在交互式控制台窗口中,因为它要求一些用户指令,并且 python 程序只有在每个 CMD 进程解决后才能恢复 每个 install.bat 文件都可能需要很长时间才能完成其进程。
我的代码如下:
for game in games :
print("----------- Starting conversion for %s -----------" %game)
subprocess.call("start cmd /C " + "Install.bat", cwd=os.path.join(gamesDosDir,game), shell=True)
print("end")
但是外壳内的控制台窗口是一次性启动的,并且“结束”消息会在它们中的任何一个完成之前出现事件,而我希望它们一个接一个地出现,直到 n+1 一个n 一个完成并关闭控制台窗口(由用户或自动 /K 或 /C 然后)。
我知道这是使用 CMD 的一些问题,因为调用应该被阻塞。如何解决?此外,如果可能的话,如何保持完全相同并添加“Y”和“Y”作为默认用户输入?
【问题讨论】:
-
您不需要使用
Start命令,如果没有/wait选项,这是主要问题。当脚本无论如何都应该在其默认解释器中自动运行时,我也觉得奇怪的是,以脚本作为参数运行cmd.exe。 -
尝试使用批处理文件的完整绝对路径并加上引号,并删除
start:'cmd /C "D:\Scripts\Install.bat"',例如... -
@Compo 很好,我试着这样做,但我不知道
-
@aschipfl 如果 bat 文件不是从它的目录中运行,它就不起作用,因为它可能使用相对路径
-
使用 "subprocess.call("cmd /C Install.bat", cwd=os.path.join(gamesDosDir,game), shell=True)" 命令阻塞但我看不到cmd 窗口,然后输入它正在等待的输入,它会永远阻塞
标签: python windows batch-file cmd windows-console