Поймать вывод logger.info в подпроцесс python? - PullRequest
0 голосов
/ 07 февраля 2020

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.

1 Ответ

1 голос
/ 25 марта 2020

Хорошо, чтобы ответить на этот вопрос для потенциальных будущих читателей.

Добавьте logging.getLogger().setLevel(logging.INFO) к hello.py. Уровень ведения журнала по умолчанию - предупреждение, как указывает пользователь blues. Поэтому, когда вы используете logging.info(), который не производит никакого вывода, и именно поэтому вы его не видите.

См. Больше в https://docs.python.org/3/library/logging.html#logging .Logger.setLevel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...