如何以编程方式输入telnet的转义字符?
我正在使用paramiko来通过SSH连接到远程机器,目前这个过程看起来都很顺利。
client.connect(hostname, port=ssh_port, username=username, key_filename=key_fname, password=password)
现在我需要在远程机器上进行更深层次的操作,使用
stdin, stdout, stderr = client.exec_command('telnet localhost %d'%port)
这段代码似乎给了我正确的句柄,可以开始通过stdin.write
进行交流。
我的问题是,当我完成操作后,不知道怎么正确退出telnet。如果我手动操作,可以进入telnet,并看到:Escape character is '^]'.
我可以在键盘上按Ctrl+]
,然后会弹出一个小菜单,显示:
Console escape. Commands are:
l go to line mode
c go to character mode
z suspend telnet
e exit telnet
然后我可以通过按'e'来退出(直接退出,不需要按'enter'键)。
但是当我在脚本中尝试这样做时,比如stdin.write('^]e')
、stdin.write('\^]e')
、stdin.write('\c]e')
、stdin.write('\M-\C-]e')
等等,我在stdout.read()
中看到的只是这些字符被字面地输入了。 在]
和e
之间加上time.sleep(0.1)
似乎也没有帮助。
我该如何以编程的方式输入这个转义序列呢?
1 个回答
6
最后我搞明白了。
简单来说就是:'\x1d'
这是一个特殊的字符,用来调出那个小菜单。我是通过 curses
模块发现这个的:
from curses.ascii import ctrl
print ctrl(']')