長時間実行コマンドの 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 を読み取るにはどうすればよいですか?