我正在尝试使用Winmerge将一个文件夹中的文件列表与另一个文件夹中的文件进行比较。 我希望在Winmerge中打开第一个比较,并在其关闭时打开第二个比较,依此类推,直到没有更多要比较的文件。
我尝试对所有文件循环调用subprocess.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进程
答案 0 :(得分:0)
您可以使用Popen.wait()
方法来等待进程结束。或者只使用subprocess.run
或subprocess.getstatusoutput
或getoutput
等。
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
答案 1 :(得分:0)
subprocess.Popen()
不会阻塞,它只会创建进程,即程序不会在生成新进程之前等待每个进程完成。我不确定您使用的是哪个版本的Python,但是:
subprocess.run()
。subprocess.call()
。这些方法会阻止并等待每个进程完成,然后再开始下一个进程。乍一看并不明显,但是您应该在subprocess documentation中找到它。