首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sshj返回Shell返回值

使用sshj返回Shell返回值
EN

Stack Overflow用户
提问于 2011-10-10 23:46:19
回答 1查看 1.7K关注 0票数 1

我使用sshj连接到远程机器以检索各种值。正如我在sshj中所理解的,当我执行以下代码来检索远程机器的主机名时:

代码语言:javascript
复制
SSHClient sshClient = new SSHClient();
Session session = sshClient.startSession();
Command commandObject = session.exec("hostname");

我知道我可以通过获取inputstream来检索返回值

代码语言:javascript
复制
session.getInputStream();

我似乎遇到的问题是,session对象(和命令)被设计成一种“使用一次,然后丢弃”的方式。因此,考虑到这一点,我想在完成会话后关闭它,以清理资源,即

代码语言:javascript
复制
commandObject.close();

但是,由于sshj的异步特性,我无法确定何时在inputstream中提供返回值,因为似乎没有任何内置的回调功能。

我能想到的解决这个问题的唯一方法是在检查输入流之前休眠一段预定的时间。然而,我觉得这似乎只是一次黑客攻击,我希望有更好的解决方案。

有人在使用sshj时遇到过类似的问题吗?有什么可行的解决方案吗?

干杯!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-22 17:34:29

您可以在会话对象上调用join(),当命令退出时,此方法将返回(或如果超时到期)。然后,您可以使用getExitCode() ->整数检查退出代码,如果没有收到退出代码,则该整数可能为null。

编辑:您所说的返回值是指命令生成的输出吗?由getInputStream()或getErrorStream()返回的InputStream实现了available()方法,因此您可以基于该方法实现一个解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7715344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档