记录长子进程sdtou

2024-04-23 07:34:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力解决一个问题,当然是因为我对模块缺乏理解。 我必须启动链式的长分析脚本,这些脚本在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流式传输到日志文件或缓冲区有关,但我不知道如何做到这一点。任何帮助都将不胜感激。在

非常感谢。在


Tags: 模块文件脚本logformatterloggingcreatestderr