如何以编程方式输入telnet的转义字符?

wim*_*wim 4 python ssh escaping telnet paramiko

我正在使用paramiko进入远程机器,到目前为止,这似乎工作正常

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
Run Code Online (Sandbox Code Playgroud)

然后我可以通过按'e'退出(它立即退出而不需要'enter'键)

但是,当我尝试这样做在我的剧本,由stdin.write('^]e'),stdin.write('\^]e'),stdin.write('\c]e'),stdin.write('\M-\C-]e'),等所有的时间我只看到stdout.read()我的剧本已在无形中进入这些字符.把它放在time.sleep(0.1)中间]并且e似乎没有帮助.

如何以编程方式输入该转义序列?

wim*_*wim 6

最后我已经解决了.

简短的回答: '\x1d'

这是提出小菜单的转义序列.我通过curses模块找到了这个:

from curses.ascii import ctrl
print ctrl(']')
Run Code Online (Sandbox Code Playgroud)