打电话给几个批处理文件通过CMD不会阻止(Call to several batch files t

2019-11-04 11:40发布

我想打电话给几个INSTALL.BAT文件一个又一个与Python槽CMD。

这是必要的,因为它要求对一些用户指令和Python程序后才每个CMD过程解决每个INSTALL.BAT文件可能需要相当长的时间来完成它的过程中恢复,每个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 1,直到第n之一结束,并且控制台窗口关闭(或者通过用户或者自动地/ K或/ C,然后)。

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

Answer 1:

最常见的方式开始一个批处理文件(或更一般地,CLI命令),如果将它作为参数传递给cmd /c 。 你对此有何评论后,我可以假设你需要使用start强制执行(新的)命令窗口的创建。

在这种情况下,正确的方法是在添加/wait选项来启动命令:这将迫使启动命令要等待它的子进程结束:

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

但@eryksun提出了一个更干净的方式。 在Windows上,.bat文件可以不被执行shell = Truecreationflags=CREATE_NEW_CONSOLE足以确保创建一个新的控制台。 所以上面的行会简直成了:

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


文章来源: Call to several batch files through CMD doesn't block