ведение длинного подпроцесса - PullRequest
0 голосов
/ 01 марта 2012

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

Большое спасибо.

1 Ответ

0 голосов
/ 01 марта 2012

Вместо этого вы можете попробовать RotatingFileHandler . Это позволит вам выбрать максимальный размер каждого файла журнала. Он автоматически начинает вход в новый файл при достижении этого предела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...