使用python子进程模式在批处理文件中运行另一个批处理文件

时间:2017-11-01 11:32:45

标签: python batch-file subprocess

我想在C:\ Users \ Administrator \ Desktop

位置运行名为Mainfile.bat的bat文件

Mainfile.bat内容

start cmd /k call C:\Users\Administrator\Desktop\1.bat

start cmd /k call C:\Users\Administrator\Desktop\2.bat

start cmd /k call C:\Users\Administrator\Desktop\3.bat

一旦Mainfile.bat启动,它应该运行bat文件中指定的三个bat文件。

要做的是,我在python中编写了一个代码,

subprocess.call("C:\\Users\\Administrator\\Desktop\\Mainfile.bat",stdin=None, stdout=None, stderr=None, shell=False)

print "Finished"

预期输出:

我想要的是,如果我运行一个Mainfile.bat文件,它应该执行命令。这样,Mainfile.bat中的每个bat文件都需要一些时间来完成这个过程,它会在完成后自动关闭。 完成所有那些bat文件(1.bat,2.bat,3.bat)之后 - 我需要打印"完成"在控制台中。

实际输出:

但是,一旦它运行Mainfile.bat文件,它就会执行三个bat文件并立即打印" finished"在控制台中......如何实现预期输出?

获得预期输出:

通过更改Mainfile.bat中的内容

(
  start 1.bat
  start 2.bat
  start 3.bat
) | pause

echo done!

1 个答案:

答案 0 :(得分:0)

    my_process = subprocess.Popen(os.path.abspath('C:\\Users\\Administrator\\Desktop\\Mainfile.bat'), shell=True)
    stdout, stderr = my_process.communicate()
    my_process.wait()

您可以使用communic(),它将等待进程完成执行。