您应该能够使用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,在旋转时发生该文件将大小超过百万字节。