【问题标题】:logging long subprocess sdtout记录长子进程标准输出
【发布时间】:2012-03-01 18:26:32
【问题描述】:

由于我对模块缺乏了解,我正在努力解决一个问题。 我必须开始链接长分析脚本,这些脚本会在 stdout 和 stderror 上生成大量输出。我需要使用日志记录模块记录子进程调用的输出。只要输出不是太大,以下代码就可以工作,但一旦输出,它就会以一个截断的日志文件结束。

import logging, subprocess

def popen_log(commandL, logFile):
    p = subprocess.Popen(commandL, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    (stdout, stderr) = p.communicate()
    #create logger
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)
    # create file handler which logs even debug messages
    fh = logging.FileHandler(logFile)
    fh.setLevel(logging.DEBUG)
    # create formatter and add it to the handlers
    formatter = logging.Formatter('%(asctime)s - %(levelname)s : %(message)s')
    fh.setFormatter(formatter)
    logger.addHandler(fh)
    logger.info(stdout)
    logger.error(stderr)
    logger.removeHandler(fh)

popen_log(['script1.py', '-i', inputFolder], 'test.log')

这当然与将 stdout 和 stderror 流式传输到日志文件或缓冲有关,但我只是不知道该怎么做。任何帮助将不胜感激。

非常感谢。

【问题讨论】:

    标签: python logging subprocess


    【解决方案1】:

    您可以改用RotatingFileHandler。这将允许您选择每个日志文件的最大大小。只要达到此限制,它就会自动开始登录新文件。

    【讨论】:

    • 谢谢,可以,我希望将所有内容保存在一个文件中。我会试一试的。