У меня есть регистратор. что-то вроде этого:subprocess.call logger информация и ошибка для stdout и stderr соответственно
import logging
logger = logging.getLogger('myApp')
hdlr = logging.FileHandler('myApp.log')
logger.addHandler(hdlr)
logger.setLevel(logging.INFO)
Я зову внешний процесс, как это:
subprocess.call("someCommand")
Я хочу, чтобы захватить стандартный вывод и стандартный поток ошибок seperatly из этого процесса, так что я могу войти их acccordingly. Например,
logger.info(<stdout>)
logger.error(<stderr>)
Я вижу различные способы захвата всего подпроцесса в одном потоке. Но, если есть реальная ошибка, я хотел бы зарегистрировать ее как таковую. Есть ли способ сделать это?
Спасибо. Так легко. Еще одна причина, как Python –
Это немного сокращается, когда stdout или stderr имеет много данных, поскольку '.communicate()' буферизует данные. Некоторые люди могут захотеть вызвать 'logger', как только строка будет доступна из любого из каналов. – Vegard
Используйте 'subprocess32' с' bufsize'. –