Paramiko Emulating IBM 3151.如何发送正确的控制按键

时间:2017-05-24 19:29:19

标签: python terminal emulation paramiko

我使用Python 2.7 Paramiko将SSH连接到一个使用IBM 3151键映射的非常旧的系统。当时的键盘有一个输入或者发送"用于提交回复的密钥。在Secure NetTerm中,我可以访问此系统并且"发送"键被映射到键盘上的右ctrl键。对于我的生活,我无法弄清楚如何发送"发送" Paramiko终端的关键。下面是我的测试代码。我能够通过接受\ n的前几个菜单选项来实现它,但我遇到了一个" popup"屏幕需要"发送"键。按右ctrl键可在模拟器中工作,但我似乎无法在Paramiko中工作。任何帮助将不胜感激。

import paramiko
import time

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
    ssh.connect('some_server.com', port=22,username='some_user', password='some_password')
except paramiko.SSHException:
    print "Connection Failed"
    quit()
channel = ssh.invoke_shell(term='IBM-3151', width=80, height=24, width_pixels=0, height_pixels=0)
channel_data = str()
host = str()
srcfile = str()

while True:
    if channel.recv_ready():
        channel_data += channel.recv(9999)
    else:
        continue
    print channel_data
    #Go to store
    if channel_data.endswith('> '):# in channel_data:
        channel.send('5\n')
        # Select a store
    if channel_data.endswith(' : '):  # in channel_data:
        channel.send('0330\n')
    if channel_data.endswith('): '):  # in channel_data:
        channel.send('Y\n')
    if 'PRESS SEND TO CONTINUE....' in str(channel_data):
        print 'test1'  # if statement works
        time.sleep(5)
        channel.send('^[!l^M')  # tried all kinds of stuff here
        print 'test2'  # script passes to here with no errors.

1 个答案:

答案 0 :(得分:0)

我将确定 发送 (或 输入 )键实际发送的字符是什么/ p>

  • 在AIX系统上使用script捕获会话中的所有字符(您可能需要此进行分析)
  • 在AIX系统的shell中,使用cat(回显)并按 control -V,然后按 * Enter

当然,请使用工作终端。如果cat显示的数据不能与您的脚本一起使用,则可能会进行一些初始化,例如,将Secure NetTerm置于应用程序模式