检测X11是否可用(python)

5 python user-interface

首先,检测X11是否正在运行并且可用于python脚本的最佳/最简单方法是什么.

父进程?
会议领导?
X环境变量?
其他?

其次,我想有一个实用程序(python脚本)来呈现一个gui(如果可用),否则使用命令行支持的工具.

我想到了这一点

-main python脚本(检测gui是否可用并启动相应的脚本)
-gui或命令行python脚本启动
-both使用通用模块进行实际工作

我非常愿意提出简化这一建议的建议.

Eri*_*rik 9

我要检查是否设置了DISPLAY(这毕竟是C API X11应用程序所做的).


cod*_*ape 8

检查返回代码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
Run Code Online (Sandbox Code Playgroud)

至于你问题的第二部分,我建议采用以下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()
Run Code Online (Sandbox Code Playgroud)


Ber*_*Ber 5

您可以简单地启动gui部分,并捕获X(或任何其他依赖于平台的图形系统不可用)引发的异常。

在运行基于文本的部分之前,请确保您确实有一个交互式终端。您的过程可能没有可见的终端启动,这在图形用户环境(如KDE,gnome或Windows)中很常见。