通过CMD调用多个批处理文件不会阻止

时间:2017-10-09 11:18:38

标签: python windows batch-file cmd windows-console

我试图用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")   

但是shell中的控制台窗口是一次性启动的,并且“end”消息在任何一个完成之前出现事件,而我希望它们一个接一个地出现而不是去n + 1,直到n一个完成并且控制台窗口关闭(由用户或自动/ K或/ C然后)。

我理解这是使用CMD的一些问题,因为调用应该是阻塞的。怎么解决?另外,如果可能的话,如何保持它完全相同并添加“Y”和“Y”作为默认用户输入?

1 个答案:

答案 0 :(得分:0)

启动批处理文件(或更常见的CLI命令)的最常用方法是将其作为参数传递给cmd /c。在您发表评论后,我可以假设您需要使用start来强制创建(新)命令窗口。

在这种情况下,正确的方法是将/wait选项添加到start命令:它将强制start命令等待其子进程的结束:

subprocess.call("start /W cmd /C " + "Install.bat", cwd=os.path.join(gamesDosDir,game),
    shell=True)

但@eryksun提出了一种更清洁的方式。在Windows上,.bat文件可以在没有shell = True的情况下执行,creationflags=CREATE_NEW_CONSOLE足以确保创建新的控制台。所以上线可能只是变成:

subprocess.call("Install.bat", cwd=os.path.join(gamesDosDir,game),
    creationflags = subprocess.CREATE_NEW_CONSOLE)