【发布时间】:2017-07-31 22:45:39
【问题描述】:
这里是从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 正在异步发送的输出。
第 2 次更新:根据 meuh 的代码,我在 https://github.com/rocky/python-term-background 中放置了一个更完整的版本
【问题讨论】:
-
你是否在下一行启动另一个完全独立的子进程来读取输出?
-
shell=True建议是的。当我删除该参数时,我现在可以看到 xterm 的输出。但未在变量中捕获。所以可能我需要做的就是事先重定向标准输出并等待,或者弄清楚如何直接从终端连接读取。我已经修改了问题以包含这一新的重要信息。