Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在(外部)函数内打印时,如何记录每个打印输出_Python_Logging - Fatal编程技术网

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
功能