我正在使用sshj连接到远程计算机以检索各种值。据我所知,在sshj中,当我执行以下代码来检索远程机器的主机名时:
SSHClient sshClient = new SSHClient();
Session session = sshClient.startSession();
Command commandObject = session.exec("hostname");
我知道我可以通过抓住输入流来检索返回值
session.getInputStream();
我似乎遇到的问题是,会话对象(和命令)被设计为'使用一次然后一次性'的方式。因此,考虑到这一点,我想在完成清理资源后关闭会话,即
commandObject.close();
但是,由于sshj的异步性质,我无法确定输入流中的返回值何时可用,因为内置似乎没有任何回调功能。
我能想到绕过这个问题的唯一方法是在检查输入流之前睡一段预定义的时间。但是我觉得这只是一个黑客,我希望有更好的解决方案。
有没有人使用sshj有任何类似的问题?有任何可能的解决方案吗?
干杯!
答案 0 :(得分:0)
您可以在Session对象上调用join(),当命令退出时,此方法将返回(或者如果超时到期)。然后你可以用getExitCode() - >检查退出代码。如果没有收到退出代码,则整数可能为null。
编辑:按返回值表示命令生成的输出是什么意思?由getInputStream()或getErrorStream()实现的InputStream实现了available()方法,因此您可以基于此实现解决方案。