我正在使用python 2.7和代码ssh客户端与 paramiko 库,我使用myhost.channel.send(chr(keycode))
将每个密钥代码发送到服务器。但它只适用于1字节密钥代码。我想发送其他多字节键码,如箭头键。我怎样才能做到这一点?请帮帮我。
答案 0 :(得分:3)
像Windows或MacOS这样的GUI使用“密钥代码”识别密钥,但SSH管道只传输字节,而不是密钥代码。
假设在服务器上的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'
答案 1 :(得分:0)
在macOS 10.13.2中,您可以使用:
class Keyboard:
up = '\x1b[A'
down = '\x1b[B'
right = '\x1b[C'
left = '\x1b[D'
(我从sys.stdin
中读取了它们)
答案 2 :(得分:-1)
我认为您可以在python中执行以下操作:
channel.sendall(chr(0x1b)+[B")
0x1B是VT100终端的ASCII转义字符。