4

私は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()time.sleep(0.1)]e

プログラムでそのエスケープシーケンスを入力するにはどうすればよいですか?

4

1 に答える 1

6

最後に、私はそれを解決しました。

簡単な答え:'\x1d'

これは、小さなメニューを表示するためのエスケープ シーケンスです。cursesモジュール経由でこれを見つけました:

from curses.ascii import ctrl
print ctrl(']')
于 2011-06-07T03:47:17.003 に答える