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

标签 python subprocess output

我有以下 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 被合并。

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

关于python - 如何将并行子进程的输出写入不同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23300242/

相关文章:

python - 如何正确传递子进程参数

java - 将打印行和文本添加到 FileWriter (writer.write)

python - PermissionRequiredMixin AccessMixinpermission_denied_message

python - 使用 MinGW(PyQt4.11、Qt4.8.6)在 Windows7 上构建 Qscintilla2 python 绑定(bind)

python 3.4子进程

python - 子进程.Popen : how to pass a list as argument

debugging - 在 swift 中重载字符串转换的规范方法是什么?

python - 使用 Wordnet Synset 的定义方法未获得所需的输出

c# - 读取文件特定行号的有效方法。 (奖金 : Python Manual Misprint)

python - 需要平均 Python 的帮助