【发布时间】:2021-10-21 15:11:20
【问题描述】:
我希望创建一个 python 包装器来捕获和丢弃由我正在使用的库生成的特定文本,并且我无法以通常的方式摆脱它们,即
import sys
from contextlib import redirect_stdout
class PrintFilter:
def __init__(self, stream, substring):
self.stream = stream
self.substring = substring
def write(self, txt):
if self.substring not in txt:
self.stream.write(txt)
my_filter = PrintFilter(stream=sys.stdout, substring="substring")
with redirect_stdout(my_filter):
result = f()
我确实通过执行让它停止打印
{ python my_program.py 2>&1; } | grep -v "string-to-ignore"
但是这有点不太理想,因为它很难忽略多个字符串。有没有一种简单的方法可以将我的 main 函数以与上面介绍的包装函数类似的方式包装在 my_program.py 中?
【问题讨论】:
-
抱歉没看懂,请问您的解决方案有什么问题?
-
这个
{ python my_program.py 2>&1; } | grep -v "string-to-ignore"有效,但是我不想在每次运行访问它的函数时包装使用这个库的所有程序。相反,我希望能够在我的 python 脚本中添加一些可以自动执行此操作的内容。如果它有帮助的话,产生一堆语句的库是 pygame,它不使用打印,而是使用某种类型的日志记录。更重要的是,不是将消息定向到标准输出,而是将它们定向到标准错误。
标签: python filter printing stdout with-statement