通过CMD调用几个batch file不会阻塞

我试图用Python通过CMD一个接一个地调用几个install.bat文件。

每个bat文件都必须在交互式控制台窗口中显示,因为它要求某些用户的指令,而且python程序只有在每个cmd进程parsing后才会恢复。每个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是1完成,控制台窗口closures(用户或自动/ K或/ C然后)。

我明白这是使用CMD的一些问题,因为呼叫应该被阻止。 如何解决? 另外,如果可能的话,如何保持它完全一样,并添加“Y”和“Y”作为默认的用户input?

Solutions Collecting From Web of "通过CMD调用几个batch file不会阻塞"

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

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

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

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

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