【问题标题】:Prevent string being printed python防止字符串被打印 python
【发布时间】:2016-01-06 19:32:08
【问题描述】:

我正在使用某个库,但无法编辑其源代码。库中有一个我必须调用的函数,当我调用它时,它会生成我想要的这个文件;但是,与此同时,它会在屏幕上显示此警告数百次。警告总是一样的。

导出过程中的警告:找不到进程对应的 GDSII 层 和目的

这有点烦人,让我打印任何东西到 stdout/stderr 都没用,因为它只是被这个愚蠢的警告淹没了。

我知道如何通过简单地分配不同的文件来重定向标准输出/标准错误。是否可以简单地检查将写入 stdout/stderr 的内容,如果是那个字符串则丢弃它,否则,打印它?

【问题讨论】:

  • 是否有无法编辑库的原因?
  • 你尝试-W标志了吗?
  • 是的,它不是我的图书馆,它是从所有者服务器上运行的。它也在商业化过程中。
  • 我建议让所有者知道他们的图书馆有一些无关的print 语句/电话,没有人喜欢健谈的图书馆。

标签: python io output stdout


【解决方案1】:

我会使用类似...

3.x

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: readablesuper().__init__(stdout)。任何想法为什么?谷歌搜索似乎没有透露太多信息。
  • @Jean-Luc 不客气。查看 2.x 版本的更新!
猜你喜欢
  • 2011-01-29
  • 2015-04-05
  • 2021-09-28
  • 1970-01-01
  • 2013-08-12
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
相关资源
最近更新 更多