我正在努力解决一个问题,当然是因为我对模块缺乏理解。 我必须启动链式的长分析脚本,这些脚本在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流式传输到日志文件或缓冲区有关,但我不知道如何做到这一点。任何帮助都将不胜感激。在
非常感谢。在
您可以改为尝试RotatingFileHandler。这将允许您选择每个日志文件的最大大小。每当达到此限制时,它会自动开始记录新文件。在
相关问题 更多 >
编程相关推荐