0

長時間実行コマンドの stdout から読み取りたい。出力を送信するプログラムがあり、応答を送信する必要があります。

問題は、inputstream に何も届いていないことです。

私がやっていることは、コマンドを実行し、コマンドから InputStream を取得し、そこから読み取ろうとしていることです。

SSHClient client = new SSHClient();
client.addHostKeyVerifier(new IgnoreHostKeyVerifier());
client.connect(getHostname(), getSshPort());
client.authPassword(getUsername(), getPassword());

Session sess = client.startSession();
Command cmd = sess.exec("/root/av_run/alarms");

InputStream is = cmd.getInputStream();
os = cmd.getOutputStream();
int piece;

while (true) {
    if (is.available() > 0) {
        piece = is.read();
    } else {
        Thread.sleep(500);
        continue;
    }
}

ここで、is.available()は常にゼロです。その条件なしで読んだ場合、読み取りは永久にブロックされます。

実行中のプログラムの stdout を読み取るにはどうすればよいですか?

4

1 に答える 1

0

コードは問題ないようです。問題は、実行するバイナリにありました。何らかの理由で、その出力を難解なストリームに配置しました。コンソールでそのコマンドを実行すると、その出力を確認できましたが、どのストリームでもキャッチできなかったため、これは非常に奇妙です。それを標準出力にパイプしても役に立ちませんでした。

とにかく、問題は解決し、バイナリは修正されました。

于 2014-10-23T09:21:19.827 に答える