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

时间:2011-06-06 07:06:09

标签: 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

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

但是当我尝试在我的脚本中执行此操作时,stdin.write('^]e')stdin.write('\^]e')stdin.write('\c]e')stdin.write('\M-\C-]e')等等。我一直在{ {1}}我的脚本按字面意思输入了这些字符。在stdout.read()time.sleep(0.1)之间添加一点]似乎没有帮助。

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

1 个答案:

答案 0 :(得分:6)

最后我已经解决了。

答案简短:'\x1d'

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

from curses.ascii import ctrl
print ctrl(']')