首页 > 解决方案 > 在python中捕获linux终端响应

问题描述

我正在修改各种 linux 终端(例如 xterm、gnome-terminal 等)中的 VT100 仿真,并且需要帮助以获取 python 脚本以从仿真器接收不可打印的转义序列。我想我掌握了 VT100 仿真部分;这是一个关于python的问题。

我想在 python 中运行以下 VT100“识别终端类型”查询:

print "\x1b[c"
resp = raw_input()
print ":".join(x.encode('hex') for x in resp)   # debugging purpose only

我几乎可以很好地使用终端的 VT100 仿真,除了resp = raw_input()需要我通过按键手动完成响应ENTER

如何让 python 在我没有手动干预的情况下从 VT100 仿真中获取输入?

标签: python

解决方案


这行得通吗?

import subprocess

proc = subprocess.Popen(["echo \x1b[c"], stdout=subprocess.PIPE, shell=True)
resp, err = proc.communicate()

print (":".join(hex(x) for x in resp)) # debugging purpose only

它在python3中,但我相信你可以在2中做大致相同的事情

编辑:
这更好:

import subprocess

resp = subprocess.check_output("echo \x1b[c", shell=True)

print (":".join(hex(x) for x in resp)) # debugging purpose only

推荐阅读