如何从Python通过SSH在控制台菜单(pdmenu)上导航?
我必须通过如何从Python通过SSH在控制台菜单(pdmenu)上导航?,python,ssh,menu,navigation,Python,Ssh,Menu,Navigation,我必须通过SSH测试远程计算机上可用的伪图形菜单(pdmenu)。像my这样的菜单最好的例子是mc、htop或tzconfig,但它们要复杂得多。 无论如何,我都不知道如何阅读和浏览这个菜单。 在我的项目中使用了paramiko包装器,但我可以直接切换到pexpect或子流程(pexpect是子流程的包装器)。 我的目标是能够将箭头键发送到菜单,查找(或读取)突出显示的行,发送输入,空格,转义,检测文本并将其发送到文本字段中。有可能吗? 我希望解决方案是跨平台的。当然这是可能的。但是,您必须解析
SSH
测试远程计算机上可用的伪图形菜单(pdmenu
)。像my这样的菜单最好的例子是mc
、htop
或tzconfig
,但它们要复杂得多。无论如何,我都不知道如何阅读和浏览这个菜单。
在我的项目中使用了
paramiko
包装器,但我可以直接切换到pexpect
或子流程
(pexpect
是子流程的包装器)。
我的目标是能够将箭头键发送到菜单,查找(或读取)突出显示的行,发送输入,空格,转义,检测文本并将其发送到文本字段中。有可能吗?
我希望解决方案是跨平台的。当然这是可能的。但是,您必须解析ascii响应(流)以找到您所需要的所有元素(例如突出显示的字符),这些元素可能不是琐碎的且依赖于终端
这是一份清单。例如,ESC
将是\x1b
,空格
将是\x20
,Enter
将是\r
特殊键和颜色表示为。例如,右箭头
将是\x1b[C
,左箭头
将是\x1b[D
,上箭头
将是\x1b[A
下箭头
将是\x1b[B
突出显示的或倒置的文本将以\x1b>为前缀[7m
,闪烁的文本将以\x1b[5m
为前缀,依此类推
谈到paramiko,您很可能必须ssh.invoke_shell()
,并在评估接收内容的同时不断从该频道接收,以了解远程菜单中实际发生的情况。通过
这应该可以让您开始了。我刚刚修改了您的解决方案:a)最好通过len(chan.in\u buffer)
b)ESC
char是'\x1b'。非常感谢!
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
ssh.connect(ip, username='root', password="password")
chan = ssh.invoke_shell()
while not chan.exit_status_ready()
buff = ''
while not buff.endswith('\x1b[2J'):
resp = chan.recv(1) # tweak, bigger chunks, use select.
buff += resp
# buff hold data up to clear-screen
# evaluate screen, send keystrokes to navigate
chan.send('\x1b\r') # ESC