【问题标题】:How can I selectively suppress certain error messages that follow a certain pattern?如何有选择地抑制遵循某种模式的某些错误消息?
【发布时间】:2011-01-19 18:58:12
【问题描述】:

我有一个 Python 程序运行的线程始终输出以下内容:

(my_program.py:12313): GLib-GIO-CRITICAL **: g_output_stream_write: assertion `buffer != NULL' failed

这会连续打印,对我的程序没有明显的不利影响。出于调试目的,我想禁止此特定行而不禁止其他错误消息。换句话说,运行:

my_computer:~$ python my_program.py 2>/dev/null

当然可以,但它也会抑制其他有用的错误消息。

当然,理想情况下,我会解决根本原因并尝试消除此错误消息,但与此同时,有没有办法选择性地不显示此错误消息?

【问题讨论】:

  • 解决问题。将比任何需要这样做的黑客和黑魔法更容易和更清洁(编辑:实际上考虑它,它可能是一个 bash oneliner,但即使这样,最好跳过“同时”部分)。

标签: python console messages


【解决方案1】:

这行得通:

 python my_program.py 2>&1| grep -v "GLib-GIO-CRITICAL"

【讨论】:

  • 使用python my_program.py 2>&1 | grep -v "GLib-GIO-CRITICAL"
  • 请注意,这将 stderr 和 stdout 组合为新的 stdout,然后通过管道传输到 grep(以过滤掉包含要忽略的字符串的行)。如果您只能重定向/管道 stderr 但大多数 shell 似乎不支持这一点,那就太好了。 (如果你不想合并它们,你可以交换 stderr 和 stdout,现在在 stdout 中通过管道传输 stderr,并将 stdout 重定向到其他地方。)此外,在某些 shell 中,你也可以使用语法 python my_program.py |& grep -v "GLib-GIO-CRITICAL" ,它是等价的.
  • 如果您将其发布为答案(使用您建议的 sn-p),我将投票赞成并删除我的。
【解决方案2】:

这看起来像是来自 GTK 的警告,你在使用它吗?我不认为你可以从 Python 中抑制它们。

【讨论】:

  • 是的,这是来自 GTK 的警告,但我希望在运行时在控制台中抑制它。
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
相关资源
最近更新 更多