【发布时间】:2020-05-23 03:49:12
【问题描述】:
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:
而且,如果我用logger.warning() 替换logging.info(),那么我会得到这个输出:
returncode: 0
stdout:
stderr: WARNING:root:hello, I am a log
但是,我有一堆带有logging.info 的代码,我想把它引入一个python 子进程。我该怎么做?
最后的笔记:
- 我想大多数人会更愿意通过
import hello拨打hello.py,但假设在这种情况下这不是一个选项。 - 我使用的是 Python 3.8。
【问题讨论】:
-
在 hello.py 中以
logging.getLogger().setLevel(logging.INFO)开头:docs.python.org/3/library/logging.html#logging.Logger.setLevel -
顺便说一句,您在使用 info() 时看不到输出,因为它没有被打印——如果这是您问题的一部分。
-
正如 petre 指出的那样,这与子流程无关。默认的日志记录级别是警告,下面的任何内容都不会出现。
-
@petre 你是对的。我没有意识到除非您更改级别,否则不会打印 INFO。如果您输入它作为答案,我会接受。
标签: python python-3.x logging subprocess