3

我正在使用 python 2.7 和带有paramiko库的代码 ssh 客户端,我myhost.channel.send(chr(keycode))用来将每个键码发送到服务器。但它只适用于 1 字节的键码。我想发送其他多字节键码,如箭头键。我怎样才能做到这一点?请帮我。

4

3 回答 3

3

像 Windows 或 MacOS 这样的 GUI 使用“keycodes”识别密钥,但 SSH 管道只传输字节,而不是 keycode。

假设在您的服务器上运行在 ssh 中的程序是交互式的(也就是说,它期望有人使用它),您需要找出它期望接收的字节模式类型。当你打开你的频道时,确保你正在调用.get_pty()它并给它一个终端参数(默认的,vt100非常安全)。然后,您需要阅读 VT100 终端的文档,以了解按下各种键时它发送的字节序列。我建议阅读Xterm Control Sequences文档(Xterm 严格来说不是 vt100 仿真器,但它的文档非常完整),并且不要与原始 VT100 终端的硬件细节混淆)。请注意,在该文档中,“CSI”实际上表示 Python 字符串'\e['

例如,Xterm 控制序列文档说箭头键是“CSI A”代表向上,“CSI B”代表向下,“CSI C”代表右边,“CSI D”代表左边。在 Python 中,这看起来像:

up = '\e[A'
down = '\e[B'
right = '\e[C'
left = '\e[D'
于 2013-01-08T08:12:36.870 回答
0

在 macOS 10.13.2 中,您可以使用:

class Keyboard:
    up = '\x1b[A'
    down = '\x1b[B'
    right = '\x1b[C'
    left = '\x1b[D'

(我从 中读到它们sys.stdin

于 2019-11-07T04:19:39.960 回答
-1

我认为在python中您可以执行以下操作:

channel.sendall(chr(0x1b)+"[B")

0x1B 是 VT100 终端的 ASCII 转义字符。

于 2019-10-20T01:39:16.113 回答