由于我对模块缺乏了解,我正在努力解决问题。 我必须启动链式长分析脚本,这些脚本在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到日志文件或缓冲的流式传输有关,但我无法弄清楚如何这样做。任何帮助都会非常感激。
非常感谢。