sshj,从长时间运行的命令中读取InputStream

时间:2014-10-22 09:03:19

标签: java sshj

我想从长时间运行命令的stdout中读取。 有一个程序,它向我发送一些输出,我必须发送一些响应。

问题是没有任何东西到达输入流。

我在做什么,是执行命令,从命令中取出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?

1 个答案:

答案 0 :(得分:0)

看来代码没问题。问题在于我运行的二进制文件。出于某种原因,它将其输出放在一些深奥的流中。这真的很奇怪,因为在控制台中,当我运行该命令时,我可以看到它的输出,但我无法在任何流上捕获它。将它连接到stdout也没有帮助。

无论如何,问题解决了,二进制修复了。