gpt4 book ai didi

python - 与 xterm 兼容的 TTY 颜色查询命令?

转载 作者:行者123 更新时间:2023-12-01 02:43:35 25 4
gpt4 key购买 nike

这是从 https://github.com/rocky/bash-term-background 中提取的一些 shell 代码获取终端背景颜色。我想在 Python 中模仿这种行为,这样它也可以检索值:

stty -echo
# Issue command to get both foreground and
# background color
# fg bg
echo -ne '\e]10;?\a\e]11;?\a'
IFS=: read -t 0.1 -d $'\a' x fg
IFS=: read -t 0.1 -d $'\a' x bg
stty echo
# RGB values are in $fg and $bg

我可以翻译其中的大部分内容,但我遇到问题的部分是 echo -ne '\e]10;?\a\e]11;?\a'

我认为:

output = subprocess.check_output("echo -ne '\033]10;?\07\033]11;?\07'", shell=True)

在 Python 2.7 中是一个合理的翻译,但我没有得到任何输出。在 Xterm 兼容终端中的 bash 中运行会给出:

rgb:e5e5e5/e5e5e6
rgb:000000/000000

但是在 python 中我没有看到任何东西。

更新:正如 Mark Setchell 所建议的,问题的一部分可能是在子进程中运行的。所以当我将 python 代码更改为:

 print(check_output(["echo", "-ne" "'\033]10;?\07\033]11;?07'"]))

我现在可以看到 RGB 值输出,但只有在程序终止后才能看到。所以这表明问题在于连接以查看我猜 xterm 正在异步发送的输出。

第二次更新:根据 meuh 的代码,我已将其完整版本放在 https://github.com/rocky/python-term-background

最佳答案

您只需将转义序列写入标准输出,并在将其设置为原始模式后读取标准输入上的响应:

#!/usr/bin/python3
import os, select, sys, time, termios, tty

fp = sys.stdin
fd = fp.fileno()

if os.isatty(fd):
old_settings = termios.tcgetattr(fd)
tty.setraw(fd)
print('\033]10;?\07\033]11;?\07')
time.sleep(0.01)
r, w, e = select.select([ fp ], [], [], 0)
if fp in r:
data = fp.read(48)
else:
data = None
print("no input available")
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
if data:
print("got "+repr(data)+"\n")
else:
print("Not a tty")

关于python - 与 xterm 兼容的 TTY 颜色查询命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45426412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com