检测X11是否可用(python)
首先,检测X11是否正在运行并可用于python脚本的最佳/最简单方法是什么 父进程?检测X11是否可用(python),python,user-interface,Python,User Interface,首先,检测X11是否正在运行并可用于python脚本的最佳/最简单方法是什么 父进程? 会议主持人? X个环境变量? 其他的 其次,我希望有一个实用工具(python脚本)来显示gui(如果可用),否则使用命令行支持的工具 我突然想到了这个 -主python脚本(检测gui是否可用并启动相应的脚本) -gui或命令行python脚本启动 -两者都使用通用模块来完成实际工作 我非常愿意接受简化这一点的建议 我会检查是否设置了显示(这毕竟是C API X11应用程序所做的) 导入操作系统 如果os.
会议主持人?
X个环境变量?
其他的 其次,我希望有一个实用工具(python脚本)来显示gui(如果可用),否则使用命令行支持的工具 我突然想到了这个 -主python脚本(检测gui是否可用并启动相应的脚本)
-gui或命令行python脚本启动
-两者都使用通用模块来完成实际工作
我非常愿意接受简化这一点的建议 我会检查是否设置了显示(这毕竟是C API X11应用程序所做的)
导入操作系统
如果os.environ.get('DISPLAY'):
打印(“X11可用”)
您只需启动gui部件,并捕获当X(或任何其他依赖于平台的图形系统)不可用时它引发的异常
在运行基于文本的部件之前,请确保您确实拥有一个交互式终端。您的进程可能在没有可见终端的情况下启动,这在KDE、gnome或windows等图形用户环境中很常见。请检查
xset-q的返回代码:
def X_is_running():
from subprocess import Popen, PIPE
p = Popen(["xset", "-q"], stdout=PIPE, stderr=PIPE)
p.communicate()
return p.returncode == 0
至于问题的第二部分,我建议采用以下main.py
结构:
import common_lib
def gui_main():
...
def cli_main():
...
def X_is_running():
...
if __name__ == '__main__':
if X_is_running():
gui_main()
else:
cli_main()
“X”是指“X窗口系统”还是“某个随机软件”中的“X”?问题的GUI部分倾向于消除“X”的歧义,但我同意指定X11可能会使问题更清楚。@Erik:对我来说,GUI是指“随机软件X的控制台应用程序”。为了避免重复问题,这有助于将每个问题合理地弄清楚。事实上,这也是我最喜欢的方法。这也很常见:上次我检查时,Redhat的Anaconda安装程序也会这样做。这是最简单的。我认为显示答案很好,但python异常已经发生了;这取决于您想要的位置如果没有设置显示(以我的经验),ie import gtk会导致异常。我想如果您携带足够的设备,您可以检查显示,然后为gui库进行导入。我觉得,显示的另一个优点是基于最纯粹的编程实践,异常不应该处理程序逻辑(如果您想将其分类为检查显示为程序逻辑)会引发什么异常?谢谢。检查xset返回代码的方法对我来说比只检查显示变量更有用:在我的情况下,设置了显示变量,但由于一些不相关的网络/防火墙问题,X11连接无法工作。