1

sshj を使用して Android 用の ssh アプリケーションを作成しようとしています。サーバーに接続して入力ストリームから問題なく読み取ることができ、次のような結果が得られます。

Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0.29-generic x86_64)

Documentation: https://help.ubuntu.com/

Last login: date time from user`

通常、user@host:~$ の形式で入力プロンプトが表示されることを期待します。入力ストリームをここで終了します。シェルへの書き込みとコマンドの実行は問題なくできますが、入力プロンプトが表示されないのは本当に気になります。出力ストリームに書き込むタイミングと適切なフォーマットを知るのに役立つからです。コマンドを実行すると、プロンプトが入力ストリームに書き込まれ、次のようになります。

"executed command"

user@host:~$ "executed command"

"result"`

readline() と read() を使用して読み取りを試み、ストリームに読み取り可能なデータがあるかどうかを確認しました。

コマンドを実行せずに入力ストリームからプロンプトを受け取る方法はありますか?

4

1 に答える 1

2

この問題は、「RudimentaryPTY」の例に示すようにStreamCopierを使用し、System.outをPrintStreamにリダイレクトすることで回避できます。

    baos = new ByteArrayOutputStream();
    ps= new PrintStream(baos);
    System.setOut(ps);
    new StreamCopier (shell.getInputStream(),System.out).bufSize(shell.getLocalMaxPacketSize()).spawn("stdout");
    textView.setText(baos.toString("UTF8"));

このソリューションは完全ではありませんが、機能します。私はこれをより良くする方法についての提案をまだ開いています!

于 2012-09-03T19:09:50.527 に答える