在python子进程中捕获logger.info输出?

问题描述 投票:0回答:1

hello.py:

import logging
logging.info("hello, I am a log")

wrapper.py:

import subprocess
from subprocess import PIPE

result = subprocess.run('python ./hello.py'.split(' '), stdout=PIPE, stderr=PIPE, universal_newlines=True)
print(f'returncode: {result.returncode}')
print(f'stdout: {result.stdout}')
print(f'stderr: {result.stderr}')

当我打电话给python wrapper.py时,我希望看到此输出:

returncode: 0
stdout: INFO:root:hello, I am a log
stderr: 

但是,我却得到了这个输出:

returncode: 0
stdout:
stderr: 

并且,如果我将logging.info()替换为logger.warning(),则得到以下输出:

returncode: 0
stdout:
stderr: WARNING:root:hello, I am a log

但是,我到处都有一堆带有logging.info的代码,我想将其提取到python子进程中。我该怎么办?


最后注:

  • [我想大多数人都希望通过执行hello.py来调用import hello,但在这种情况下,这不是一个选择。
  • 我正在使用Python 3.8。
python python-3.x logging subprocess
1个回答
0
投票

好吧,那么让潜在的读者了解一下。

logging.getLogger().setLevel(logging.INFO)添加到hello.py。默认的日志记录级别是警告,因为用户蓝调指出。因此,当您使用logging.info()时不会产生任何输出,这就是为什么您看不到它的原因。

[在https://docs.python.org/3/library/logging.html#logging.Logger.setLevel上查看更多内容

© www.soinside.com 2019 - 2024. All rights reserved.