Python 在(外部)函数内打印时,如何记录每个打印输出
我对记录器不太熟悉;请允许我问一下 基本上我想记录我打印的所有内容。问题是打印行位于外部文件中声明的函数内部。例如,我的Python 在(外部)函数内打印时,如何记录每个打印输出,python,logging,Python,Logging,我对记录器不太熟悉;请允许我问一下 基本上我想记录我打印的所有内容。问题是打印行位于外部文件中声明的函数内部。例如,我的main.py文件如下 from do_run import do_run import logging if __name__ == "__main__": logging.basicConfig(level=logging.INFO, format='%(message)s') logger = logging.getLogger()
main.py
文件如下
from do_run import do_run
import logging
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, format='%(message)s')
logger = logging.getLogger()
logger.addHandler(logging.FileHandler('test.log', 'a'))
global print
print = logger.info
do_run()
我在单独的python文件do_run.py
中定义了do_run()函数中的打印行:
def do_run():
print('blah')
问题是'test.log'文件中没有打印'blah',我希望在其中打印它
有没有一种简单的方法来修复它?有点像hack-y,但是你可以使用
unittest.mock中的patch
将它记录到文件中并打印出来
from src.do_run import do_run
import logging
from unittest.mock import patch
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, format='%(message)s')
logger = logging.getLogger()
logger.addHandler(logging.FileHandler('test.log', 'a'))
with patch("src.do_run.print", logger.info):
do_run()
当我运行上述代码时,我会得到一个test.log
文件,其中包含blah
的内容。不要覆盖内置的print
功能