我在python中创建Gtk.Window()
。因为我正在使用的主题,我收到了一些警告:
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'没有打印(如预期的那样),但上面提到的警告仍然出现。
有什么建议吗?
答案 0 :(得分:2)
重定向sys.stdout
和sys.stderr
仅影响Python代码;在您的情况下,您看到的错误来自Gtk(在较低级别)。
您必须使用原始文件描述符重定向。 看看这个:How do I prevent a C shared library to print on stdout in python?
基本上这里有一些代码可以将stdout重定向到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')
答案 1 :(得分:1)
@Matyas。
该错误是由旧版本的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
我之前在项目中遇到过这种情况。