下面是從https://github.com/rocky/bash-term-background中提取的一些shell代碼來獲取終端背景顏色。我想模仿在Python這種行爲,以便它可以檢索值過:xterm兼容的TTY顏色查詢命令?
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一個合理的翻譯,但我沒有得到任何輸出。在bterm運行在一個Xterm兼容的終端給出:
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的輸出。但沒有捕獲到變量中。因此,我可能需要做的就是事先重定向stdout並等待,或者直接從終端讀取連接。我已經修改了這個問題以包含這個新的重要信息。 – rocky