【发布时间】:2015-08-21 13:41:52
【问题描述】:
我正在尝试将 bash 脚本迁移到 Python。
bash 脚本并行运行多个操作系统命令,然后等待它们完成后再恢复,即:
command1 &
command2 &
.
命令&
等待
命令
我想使用 Python 子进程实现相同的目的。这可能吗?如何在恢复之前等待 subprocess.call 命令完成?
【问题讨论】:
我正在尝试将 bash 脚本迁移到 Python。
bash 脚本并行运行多个操作系统命令,然后等待它们完成后再恢复,即:
command1 &
command2 &
.
命令&
等待
命令
我想使用 Python 子进程实现相同的目的。这可能吗?如何在恢复之前等待 subprocess.call 命令完成?
【问题讨论】:
您仍然可以使用Popen,它采用与subprocess.call 相同的输入参数,但更灵活。
subprocess.call:完整的函数签名与 Popen 构造函数的签名相同 - 此函数将所有提供的参数直接传递到该接口。
一个区别是subprocess.call 阻塞并等待子进程完成(它建立在Popen 之上),而Popen 不会阻塞,因此允许您并行启动其他进程。
尝试以下方法:
from subprocess import Popen
commands = ['command1', 'command2']
procs = [ Popen(i) for i in commands ]
for p in procs:
p.wait()
【讨论】:
.wait() 替换为 .communicate() 并将参数 stdout=subprocess.PIPE 和 stderr=subprocess.PIPE 添加到 Popen()跨度>