我正在尝试使用 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.run
或subprocess.getstatusoutput
或getoutput
等。
- 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()
。
这些方法会阻止并等待每个进程完成,然后再开始下一个进程。起初并不明显,但您应该在子流程文档中找到它。