Python:通过SSH发送按键事件

3

我正在尝试使用Python 2.7 Paramiko模块在没有X.org的远程服务器上模拟按键事件。我需要连续发送F2Enter

根据这个讨论,我已经实现了以下代码:

import paramiko
client = paramiko.SSHClient()
client.connect(...)
channel = client.get_transport().open_session()
channel.get_pty("vt100")
channel.settimeout(100)

假设F2等于Python字符串'\e[12~'(这是从提到的答案xterm控制序列中得出的),我试图将其发送到远程服务器:
channel.send('\e[12~')

之后脚本就卡住了。我做错了什么?谢谢。

3
http://mywiki.wooledge.org/XyProblem - Ignacio Vazquez-Abrams
1个回答

4
首先,我建议阅读xterm控制序列的PDF版本,它最初是为纸质设计的,自动转换为HTML并不完美。
终端仿真器的历史悠久而复杂,但其中一点是,VT100只有四个功能键(PF1到PF4),当其后继者VT220添加了另外16个功能键时,原始编码方案已经无法容纳,所以他们切换到了不同的编码方式……但出于兼容性的考虑,他们仍使用F1到F4的旧编码。因此,尽管F5是CSI 15 ~,但F2不是CSI 12 ~。相反,特别是如果您告诉Paramiko您正在模拟VT100,那么您应该使用VT100编码的F2,即SSE Q'\eOQ作为Python字符串。
我不知道这是否完全导致了您的问题,但它可能是其中一部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接