防止Python中字符串被打印输出

8
我正在使用一些库,但无法编辑其源代码。库中有一个函数必须调用,调用时它会生成我想要的文件;然而与此同时,它会在屏幕上打印这个警告数百次。这个警告总是相同的。
警告信息如下:

Warning during export : no corresponding GDSII layer found for process and purpose

这有点烦人,因为它使我在stdout/stderr上打印任何东西都变得毫无意义,因为它只会被这个愚蠢的警告淹没。
我知道如何通过简单地分配不同的文件来重定向stdout/stderr。是否可以简单地检查将写入stdout/stderr的内容,如果是该字符串则将其丢弃,否则打印它?

1
你不能编辑这个库的原因是什么? - intboolstring
你尝试过使用-W标志吗? - sam
是的,这不是我的库,它是从所有者的服务器上运行的。它也正在商业化的过程中。 - Jean-Luc
我建议让所有者知道他们的库有一些多余的“print”语句/调用,而且没有人喜欢啰嗦的库。 - TigerhawkT3
1个回答

8
我可以翻译,请问需要翻译成哪种语言呢?
import sys
from _io import TextIOWrapper

class StdoutFilter(TextIOWrapper):

    def __init__(self, stdout):
        super().__init__(stdout)
        self.stdout = stdout

    def write(self, output):
        if output != "don't write this":
            self.stdout.write(output)

sys.stdout = StdoutFilter(sys.stdout)

print("hello, world!")
print("don't write this")

sys.stdout = sys.__stdout__

2.x

from StringIO import StringIO

class StdoutFilter(StringIO):

    def __init__(self, stdout):
        StringIO.__init__(self, stdout)
        self.stdout = stdout

希望这有所帮助!

谢谢,确实有帮助!但是在Python 2.7中似乎存在一个奇怪的问题,我遇到了错误:attribute error: readable,出现在super().__init__(stdout)这一行。你有什么想法吗?谷歌搜索似乎没有找到太多相关信息。 - Jean-Luc
1
@Jean-Luc 不用谢。请查看2.x版本的更新! - cdonts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接