如何仅在前一个进程关闭后才启动一个进程
How to start a process only after the previous one is closed
我正在尝试使用 Winmerge 将一个文件夹中的文件列表与另一个文件夹中的一些文件进行比较。
我希望在 Winmerge 中打开第一个比较,并在其关闭后打开第二个比较,依此类推,直到没有更多文件可供比较。
我已经尝试在所有文件的循环中调用 subprocess.Popen(),但这会启动多个 Winmerge windows。
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()
。
这些方法确实会阻塞并等待每个进程完成,然后再开始下一个进程。起初并不明显,但你应该在 subprocess documentation.
中找到它
我正在尝试使用 Winmerge 将一个文件夹中的文件列表与另一个文件夹中的一些文件进行比较。 我希望在 Winmerge 中打开第一个比较,并在其关闭后打开第二个比较,依此类推,直到没有更多文件可供比较。
我已经尝试在所有文件的循环中调用 subprocess.Popen(),但这会启动多个 Winmerge windows。
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()
。
这些方法确实会阻塞并等待每个进程完成,然后再开始下一个进程。起初并不明显,但你应该在 subprocess documentation.
中找到它