【问题标题】:How to get Linux Terminal name如何获取 Linux 终端名称
【发布时间】:2021-09-14 13:59:23
【问题描述】:

假设我想在我的脚本之外运行另一个终端。我会先做:

from subprocess import Popen

然后我会打电话:

Popen(['xterm (or insert terminal name here)', '-e', 'xterm'])

这很好,但我想知道是否有办法找到用户正在运行 Python 脚本的终端名称(用户输入的终端 ./python_application_name_here.py),假设变量是叫x

有没有办法可以做到这一点?:

Popen([str(x), '-e', str(x)])

我找到了一种在 Java 中执行此操作的方法,但我不太了解该语言:how to get the linux terminal name

【问题讨论】:

  • 这个问题不是获取用户正在使用的终端,它只是返回用户系统上安装的任何终端。如果安装了多个终端,它将返回数组中的第一个。
  • 在 MacOS 上,环境变量 TERM_PROGRAM 包含终端应用程序的名称。我不知道在其他操作系统上是否也是如此。
  • 如果用户通过 ssh 连接,或者通过串行线连接的实际硬件终端怎么办?
  • 挖了很久才发现在Linux上这个环境变量叫TERM。所以现在我现在基本上可以做的是'env' >> whatever.txt 然后只是open() 在python中查找变量名TERM。感谢@Barmar 的建议。
  • 跨站点重复,用处有限:unix.stackexchange.com/questions/481142/… 在字里行间,它告诉您在 Debian(以及 Ubuntu、Mint 等)上,命令 x-terminal-emulator 将启动管理员(尽管也许不是用户的;这很模糊,所以许多管理员只会保留默认的)首选图形终端。

标签: python python-3.x terminal subprocess


【解决方案1】:

我还没有找到 python 的方法,但是,在 bash 中,您可以将'env' 的输出重定向到这样的文本文件:'env' >> t.txt 然后open() 在 python 中。然后使用环境变量打开另一个终端:

from subprocess import Popen

with open('dir_name_of_txt.txt', 'r') as var:
   a=var.read().splitlines()
   for rand in a:
       if a[rand].find('TERM=') == int(-1):
           del a[rand]
a = str(a)
if a.find('xterm') != int(-1):
    Popen(['xterm', '-e', 'xterm'])
else:
    if a.find('-256color') != int(-1):#found this happens with xterm
        a.replace('-256color', '')
    Popen([str(a.replace('TERM=', '')), '-e', str(a.replace('TERM=', ''))])
input('it ran! enter to exit')

我不知道这是否有效,因为我还没有测试过。

【讨论】:

  • 顺便说一句,如果有人有办法在 python 中执行此操作(最好没有任何外部文本文件),请留下答案,这只是一个临时解决方案,有点像“杰里操纵”。跨度>
  • 也可以通过os.environ获取环境变量。 (类似于os.environ["TERM"]
  • TERM 表示用户在哪个终端emulation下运行。大量使用xterm 甚至不一定在他们的系统上可用的用户将拥有TERM=xterm;其他常见值是vt100vt220 等,它们甚至不是可执行文件的名称。
  • 对。我在我的电脑上使用 MacOS 终端,但是 TERM=xterm-color.
猜你喜欢
  • 2021-03-10
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
  • 2012-06-13
  • 2018-12-01
相关资源
最近更新 更多