您應該能夠使用STDLIB日誌包來做到這一點。相反,子輸出直接連接到一個文件中,你可以做這樣的事情:
import logging
logger = logging.getLogger('foo')
def stream_reader(stream):
while True:
line = stream.readline()
logger.debug('%s', line.strip())
這只是記錄從流接收的每一行,你可以配置一個RotatingFileHandler
提供日誌文件循環日誌記錄。然後您安排閱讀這些數據並記錄下來。
foo_proc = subprocess.Popen(['foo'], stderr=subprocess.PIPE)
thread = threading.Thread(target=stream_reader, args=(foo_proc.stderr,))
thread.setDaemon(True) # optional
thread.start()
# do other stuff
thread.join() # await thread termination (optional for daemons)
當然你也可以撥打stream_reader(foo_proc.stderr)
過,但我假設你可能有其他的工作要做,而富子做它的東西。
這裏是你可以配置日誌(代碼應該只執行一次)的一種方法:
import logging, logging.handlers
handler = logging.handlers.RotatingFileHandler('/tmp/foo.log', 'a', 100000, 10)
logging.getLogger().addHandler(handler)
logging.getLogger('foo').setLevel(logging.DEBUG)
這將創造多達100K命名foo.log的10個文件(和旋轉foo.log.1後,foo.log.2等,其中foo.log是最新的)。您也可以通過在1000000 1給你只是foo.log和foo.log.1,在旋轉時發生該文件將大小超過百萬字節。