2012-03-01 42 views
0

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

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日志文件或与缓冲的流,但我只是无法弄清楚如何做到这一点。任何帮助将非常感激。

非常感谢。

回答

0

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

+0

谢谢,这可以,我最好希望将所有内容保存在一个文件中。我会试一试。 – user1242959 2012-03-02 08:57:52