2012-03-01 77 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