Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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_Abstract Syntax Tree_Rope - Fatal编程技术网

将python打印语句转换为日志记录

将python打印语句转换为日志记录,python,abstract-syntax-tree,rope,Python,Abstract Syntax Tree,Rope,我正在开发一个大型代码库,它使用print语句进行日志记录,而不是python日志记录。我想知道是否有建议将所有这些打印语句转换为对logging.info的调用?这些打印中的许多都分布在几行上,因此任何解决方案都需要处理这些情况,并且希望能够保持格式 我已经研究过python rope,但它似乎没有将调用转换为语句(如print)的功能。您可以使用2to3,只对print语句->print函数应用修复 2to3 --fix=print [yourfiles] # just d

我正在开发一个大型代码库,它使用print语句进行日志记录,而不是python日志记录。我想知道是否有建议将所有这些打印语句转换为对logging.info的调用?这些打印中的许多都分布在几行上,因此任何解决方案都需要处理这些情况,并且希望能够保持格式


我已经研究过python rope,但它似乎没有将调用转换为语句(如print)的功能。

您可以使用
2to3
,只对print语句->print函数应用修复

2to3 --fix=print [yourfiles]          # just displays the diff on stdout
2to3 --fix=print [yourfiles] --write  # also saves the changes to disk
这将自动处理所有这些奇怪的情况,然后将打印功能转换为日志功能应该是一个简单的查找和替换,例如,
sed

如果由于某种原因您没有
2to3
脚本的快捷方式,请将
lib2to3
作为模块运行:

python -m lib2to3 --fix=print .

只需在代码开始之前添加这几行代码,它就会记录打印的所有内容。我想你在找这样的东西

import logging
import sys

class writer :
    def __init__(self, *writers) :
        self.writers = writers

    def write(self, text) :
        logging.warning(text)


saved = sys.stdout
sys.stdout = writer(sys.stdout)


print "There you go."
print "There you go2."

我打赌您也可以直接修改
lib2to3
来添加自定义修复程序。这可能更简单。这看起来是一个完美的解决方案。谢谢这可能对某些人有所帮助,2to3工具需要-w开关来编写更改,命令是
2to3--fix=print-w。
2to3工具也可以作为python工具包的一部分安装。如果您使用的是yum,那么
yum安装python tools
就可以完成这项工作。-1这是一个难题,没有找到最终希望将打印更改为日志的真正原因(日志旋转、日志级别等功能)。logging.info()调用不仅仅是打印到文件。