Python 如何将并行子进程的输出写入不同的文件

Python 如何将并行子进程的输出写入不同的文件,python,subprocess,output,Python,Subprocess,Output,我有以下python脚本。如何分别记录每个命令的输出,即每个包含该命令输出的命令一个文件 #!/usr/bin/env python

我有以下python脚本。如何分别记录每个命令的输出,即每个包含该命令输出的命令一个文件

#!/usr/bin/env python                                                                                                                                                                                                                                                           

from subprocess import Popen
import sys

commands = [
    'command1',
    'command2',
    'command3'
]

processes = [Popen(cmd, shell=True) for cmd in commands]

for p in processes:
    p.wait()

只需将
stdout
参数设置为相应的文件:

import shlex
from contextlib import ExitStack # $ pip install contextlib2 (on Python 2)
from subprocess import Popen

with ExitStack() as stack:
    for i, cmd in enumerate(commands):
        output_file = stack.enter_context(open('output%d.log' % i, 'w'))
        stack.callback(Popen(shlex.split(cmd), stdout=output_file).wait)
要重定向子进程的stderr输出,可以设置
stderr
参数。如果
stderr=subprocess.STDOUT
,则STDOUT和stderr合并

用于关闭文件并等待已启动的子进程退出,即使
with
-语句内部发生异常,例如,如果某个命令无法启动