0

我正在Gtk.Window()用python创建一个。因为我使用的主题,我收到了一些警告,例如:

Gtk-WARNING **: Theme parsing error: other-applications.css:35:21: 'px' is not a valid color name

但这没关系。我只想从命令行输出中隐藏这些信息。

我试过但没有奏效的是:

# open /dev/null
devnull = open(os.devnull, 'w')

# redirect the stderr/out of the current process
sys.stdout = devnull
sys.stderr = devnull

# open the window
window = Gtk.Window()

print 'hello world'

# eventually restore previous stderr/out
...

问题是没有打印“hello world”(如预期的那样),但仍然出现上述警告。

有什么建议么?

4

2 回答 2

2

重定向sys.stdout并且sys.stderr只影响 Python 代码;在您的情况下,您看到的错误来自 Gtk(在较低级别)。

您必须使用原始文件描述符进行重定向。看看这个:如何防止 C 共享库在 python 的标准输出上打印?

基本上这里有一些代码在 C 代码的最低级别重定向标准输出,但不适用于 Python 代码(从 Dietrich Epp 得到答案):

def redirect_stdout():
    # Redirecting stdout
    sys.stdout.flush() # <--- important when redirecting to files
    newstdout = os.dup(1)
    devnull = os.open(os.devnull, os.O_WRONLY)
    os.dup2(devnull, 1)
    os.close(devnull)
    sys.stdout = os.fdopen(newstdout, 'w')
于 2013-10-25T15:28:31.237 回答
1

@马蒂亚斯。

该错误是由旧版本的 Gtk3 引起的,可能发生在 Debian Wheezy 或 Ubuntu 12.04 中。在 Gtk3.4 及更早版本中,px不支持作为一个单元。

修复它的一种简单方法是创建两个 css 文件,一个带有 px,一个没有。在 python 中将样式文件加载为 CssProvider 时,检查当前的 gtk3 版本,如下所示:

if Gtk.MINOR_VERSION < 6:
    # load other-applications-3.4.css
else:
    # load other-applications.css

我以前在项目中遇到过这种情况。

于 2013-10-26T09:10:35.287 回答