Я борюсь с проблемой, конечно, из-за отсутствия понимания модулей.
Мне нужно запустить длинные скрипты анализа, которые генерируют огромное количество выходных данных как на 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 в файл журнала или с буферизацией, но я просто не могу понять, как это сделать. Любая помощь будет очень признательна.
Большое спасибо.