3

私はpython 2.7を使用しており、 paramikoライブラリを使用myhost.channel.send(chr(keycode))してsshクライアントをコードしています。すべてのキーコードをサーバーに送信するために使用しています。ただし、1バイトのキーコードでのみ機能します。矢印キーなどの他のマルチバイト キーコードを送信したい。どうすればこれを達成できますか?私を助けてください。

4

3 に答える 3

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'
于 2013-01-08T08:12:36.870 に答える
-1

私はPythonで次のことができると思います:

channel.sendall(chr(0x1b)+"[B")

0x1B は VT100 端末の ASCII エスケープ文字です。

于 2019-10-20T01:39:16.113 に答える