如何仅在前一个进程关闭后启动进程



我正在尝试使用 Winmerge 将文件夹中存在的文件列表与另一个文件夹中的文件列表进行比较。我希望在 Winmerge 中打开第一个比较,并在关闭后打开第二个比较,依此类推,直到没有更多文件可供比较。

我试过调用子进程。Popen(( 在所有文件的循环中,但这会启动多个 Winmerge 窗口。

for file in file_list:
    get_comparison = subprocess.Popen('WinmergeU.exe ' +'D:database_1'+file +'D:database_2'+file, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

我希望一次只运行一个 Winmerge 进程

您可以使用

Popen.wait()方法来等待进程结束。或者只是使用subprocess.runsubprocess.getstatusoutputgetoutput等。

  • https://docs.python.org/3/library/subprocess.html#subprocess.Popen.wait
  • https://docs.python.org/3/library/subprocess.html#subprocess.run
import subprocess
if __name__ == '__main__':
    p = subprocess.Popen('echo 1', stdout=subprocess.PIPE)
    code = p.wait()
    print('first task finished', code)
    p = subprocess.run('echo 2', stdout=subprocess.PIPE)
    print('second task finished', p.returncode, p.stdout.decode())
    code, output = subprocess.getstatusoutput('echo 3')
    print('third task finished', code, output)

输出:

first task finished 0
second task finished 0 2
third task finished 0 3
subprocess.Popen()不会

阻塞,它只是创建进程,即程序不会等待每个进程完成才生成一个新进程。我不确定你正在使用哪个版本的Python,但是:

  • 如果您使用的是 Python 3.7.X,请改用 subprocess.run()
  • 如果您使用的是 Python 2.7.X,请改用 subprocess.call()

这些方法会阻止并等待每个进程完成,然后再开始下一个进程。起初并不明显,但您应该在子流程文档中找到它。

相关内容

  • 没有找到相关文章