全局使整个模块的标准输出静音

时间:2019-06-19 11:52:48

标签: python python-3.x stdout global

我有一个脚本处理包含记录器的多个模块(假设模块AB)。

执行时,A的功能将自动创建一个记录器,但是为了使事情整洁,我希望来自模块B的消息仅显示在我的标准输出中。

是否有一种方便的方法可以为来自模块A的每个函数/类禁用所有打印语句,而无需显式引用要打印的函数?我在脚本处理之初就在考虑类似一行代码。

非常感谢!

2 个答案:

答案 0 :(得分:0)

此答案仅回答您问题的“禁用所有打印声明”部分。

您可以尝试在模块的开始位置插入以下内容:

print = lambda *a, **kw: None

这样,以后在模块中的所有进一步使用将使用模块的全局print而不是内置的print

如果您需要有关重定向日志记录输出的帮助,请提供设置您在模块中使用的记录器的代码。

答案 1 :(得分:0)

有两种方法:

  1. 您可以在模块A的命名空间中猴子打印功能/记录器对象的补丁,并用自己的替换。这既快速又肮脏,但是不需要在模块A中进行任何修改。如果可能的话,我强烈建议您不要这样做,否则您会遇到麻烦。

  2. 如果可以修改模块A,则正确的方法是确保模块A的所有输出均使用python logger,并确保它设置了logger名称。然后,在日志记录配置中,可以指定LoggerFilter或LoggerAdapter,以根据记录器名称前缀或LogEntry的其他属性来有选择地禁止记录日志。