私はpython 2.7を使用しており、 paramikoライブラリを使用myhost.channel.send(chr(keycode))
してsshクライアントをコードしています。すべてのキーコードをサーバーに送信するために使用しています。ただし、1バイトのキーコードでのみ機能します。矢印キーなどの他のマルチバイト キーコードを送信したい。どうすればこれを達成できますか?私を助けてください。
3 に答える
Windows や MacOS などの GUI はキーを「キーコード」で識別しますが、SSH パイプはキーコードではなくバイトを転送するだけです。
サーバーの ssh 内で実行されているプログラムが対話型である (つまり、人間が使用することを想定している) と仮定すると、受け取ると予想されるバイトパターンの種類を調べる必要があります。チャネルを開くときは、呼び出し.get_pty()
て端末パラメータを指定していることを確認してください (デフォルトのvt100
はかなり安全です)。次に、VT100 端末のドキュメントを読んで、さまざまなキーが押されたときに送信されるバイト シーケンスを確認する必要があります。Xterm 制御シーケンスのドキュメント (Xterm は厳密には vt100 エミュレーターではありませんが、そのドキュメントは非常に完全です) を読むことをお勧めします。元の VT100 端末のハードウェアの詳細と混同しないようにしてください)。そのドキュメントでは、「CSI」は実質的に Python 文字列を意味することに注意してください'\e['
。
たとえば、Xterm Control Sequences ドキュメントでは、矢印キーは上が「CSI A」、下が「CSI B」、右が「CSI C」、左が「CSI D」であると書かれています。Python では、次のようになります。
up = '\e[A'
down = '\e[B'
right = '\e[C'
left = '\e[D'
私はPythonで次のことができると思います:
channel.sendall(chr(0x1b)+"[B")
0x1B は VT100 端末の ASCII エスケープ文字です。