我有一个脚本处理包含记录器的多个模块(假设模块A
和B
)。
执行时,A
的功能将自动创建一个记录器,但是为了使事情整洁,我希望来自模块B
的消息仅显示在我的标准输出中。
是否有一种方便的方法可以为来自模块A
的每个函数/类禁用所有打印语句,而无需显式引用要打印的函数?我在脚本处理之初就在考虑类似一行代码。
非常感谢!
答案 0 :(得分:0)
此答案仅回答您问题的“禁用所有打印声明”部分。
您可以尝试在模块的开始位置插入以下内容:
print = lambda *a, **kw: None
这样,以后在模块中的所有进一步使用将使用模块的全局print
而不是内置的print
。
如果您需要有关重定向日志记录输出的帮助,请提供设置您在模块中使用的记录器的代码。
答案 1 :(得分:0)
有两种方法:
您可以在模块A的命名空间中猴子打印功能/记录器对象的补丁,并用自己的替换。这既快速又肮脏,但是不需要在模块A中进行任何修改。如果可能的话,我强烈建议您不要这样做,否则您会遇到麻烦。
如果可以修改模块A,则正确的方法是确保模块A的所有输出均使用python logger,并确保它设置了logger名称。然后,在日志记录配置中,可以指定LoggerFilter或LoggerAdapter,以根据记录器名称前缀或LogEntry的其他属性来有选择地禁止记录日志。