【发布时间】:2018-03-19 15:19:48
【问题描述】:
我正在努力解决奇怪的问题。所以... 我有这个用 python 2.7 编写的守护进程/服务。它正在使用 subprocess.Popen 启动用 gtk 编写的 GUI 应用程序。
env = os.environ.copy()
env["DISPLAY"] = ":0"
env["XAUTHORITY"] = "~/.Xauthority"
subprocess.Popen('python2.7 /path/bla/bla/myapp.py', env=env, shell=True)
我得到这个错误:
/usr/lib/python2.7/site-packages/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display
warnings.warn(str(e), _gtk.Warning)
/path/bla/bla/myapp.pypy:43: Warning: invalid (NULL) pointer instance
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
/path/bla/bla/myapp.pypy:43: Warning: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
/path/bla/bla/myapp.pypy:93: GtkWarning: Screen for GtkWindow not set; you must always set
a screen for a GtkWindow before using the window
self.window.show_all()
/path/bla/bla/myapp.pypy:93: GtkWarning: IA__gdk_pango_context_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: PangoWarning: pango_context_set_font_description: assertion 'context != NULL' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: PangoWarning: pango_context_set_base_dir: assertion 'context != NULL' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: PangoWarning: pango_context_set_language: assertion 'context != NULL' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: PangoWarning: pango_layout_new: assertion 'context != NULL' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: PangoWarning: pango_layout_set_text: assertion 'layout != NULL' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: PangoWarning: pango_layout_set_attributes: assertion 'layout != NULL' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: PangoWarning: pango_layout_set_alignment: assertion 'layout != NULL' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: PangoWarning: pango_layout_set_ellipsize: assertion 'PANGO_IS_LAYOUT (layout)' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: PangoWarning: pango_layout_set_single_paragraph_mode: assertion 'PANGO_IS_LAYOUT (layout)' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: PangoWarning: pango_layout_set_wrap: assertion 'PANGO_IS_LAYOUT (layout)' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: PangoWarning: pango_layout_set_width: assertion 'layout != NULL' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: PangoWarning: pango_layout_get_extents: assertion 'layout != NULL' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: GtkWarning: IA__gdk_screen_get_display: assertion 'GDK_IS_SCREEN (screen)' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: GtkWarning: IA__gdk_display_get_pointer: assertion 'GDK_IS_DISPLAY (display)' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: GtkWarning: IA__gdk_screen_get_n_monitors: assertion 'GDK_IS_SCREEN (screen)' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:93: GtkWarning: IA__gdk_screen_get_monitor_geometry: assertion 'GDK_IS_SCREEN (screen)' failed
self.window.show_all()
/path/bla/bla/myapp.pypy:100: GtkWarning: IA__gdk_screen_get_root_window: assertion 'GDK_IS_SCREEN (screen)' failed
bitmap = gtk.gdk.Pixmap(None, w, h, 1)
/path/bla/bla/myapp.pypy:100: GtkWarning: IA__gdk_drawable_get_depth: assertion 'GDK_IS_DRAWABLE (drawable)' failed
bitmap = gtk.gdk.Pixmap(None, w, h, 1)
如果我将传递给此子进程的 bash progamenv 的输出保存到文件中,我会得到:
_=/usr/bin/env
LANG=pl_PL.UTF8
DISPLAY=:0
INVOCATION_ID=148ed44288654745b0a5a6ab4a8da7c1
PWD=/
JOURNAL_STREAM=9:62236
SHLVL=2
XAUTHORITY=~/.Xauthority
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
【问题讨论】:
-
请将您的解决方案作为完整答案发布。
标签: python python-2.7 gtk environment-variables