Linux程序(例如bash或python脚本)如何知道它是如何启动的:从命令行还是交互式GUI?

Mic*_*ael 4 python linux bash user-interface command-line-interface

我想做以下事情:

如果从终端启动bash/python脚本,它将执行诸如打印错误消息文本之类的操作.如果从GUI会话启动脚本,例如双击文件浏览器,它将执行其他操作,例如显示GUI消息框.

Rob*_*sak 9

您可以检查,看看是否stdin和stdout连接到终端或没有.从GUI运行时,通常stdin根本不连接,并stdout连接到日志文件.当从终端中运行,既stdin和stdout将被连接到一个终端.

在Python中:

import os
import sys

if os.isatty(sys.stdout.fileno()):
    # print error message text
else:
    # display GUI message
Run Code Online (Sandbox Code Playgroud)

但是,您应该检查这是否适合您,因为它不能完全满足您的要求.但这是我能想到的最好的东西,它不依赖于太多的魔法.

DISPLAY在使用GUI代码之前,您应该检查环境变量是否已设置,因为没有它,它将无法工作.

需要注意的是终端的用户仍然可以重定向stdin或stdout以/dev/null(例如),这可能导致你的程序去与GUI行为.所以它远非完美.

最后,即使我已经给你答案,请不要这样做!用户对程序的行为根据其调用方式进行更改会让人感到困惑.