【问题标题】:How to write output from parallel subprocesses to different files如何将并行子进程的输出写入不同的文件
【发布时间】:2014-04-25 18:17:09
【问题描述】:

我有以下 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()

【问题讨论】:

    标签: python subprocess output


    【解决方案1】:

    只需将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 语句中发生异常,例如,如果某些命令无法启动。

    【讨论】:

      猜你喜欢
      • 2019-07-03
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 2019-02-05
      • 2012-07-13
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      相关资源
      最近更新 更多