如何在python中发送箭头键使用paramiko库?

时间:2012-07-23 04:39:56

标签: python ssh paramiko arrow-keys

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

3 个答案:

答案 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转义字符。