如何使用子流程设置python应用程序的显示?
我正在与奇怪的问题作斗争。所以。。。 我用Python2.7编写了这个守护进程/服务。它正在使用subprocess.Popen启动用gtk编写的GUI应用程序如何使用子流程设置python应用程序的显示?,python,python-2.7,gtk,environment-variables,Python,Python 2.7,Gtk,Environment Variables,我正在与奇怪的问题作斗争。所以。。。 我用Python2.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) 我得到这个错误: /us
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
解决方案
我必须改变:
env["XAUTHORITY"] = "~/.Xauthority"
引导路径。就我而言:
env["XAUTHORITY"] = "/root/.Xauthority"
请将您的解决方案作为完整答案发布。