Возврат возвращаемых значений Shell с использованием sshj - PullRequest
1 голос
/ 10 октября 2011

Я использую sshj для подключения к удаленным машинам для получения различных значений.Как я понимаю в sshj, когда я выполняю следующий код для получения имени хоста удаленного компьютера:

SSHClient sshClient = new SSHClient();
Session session = sshClient.startSession();
Command commandObject = session.exec("hostname");

Я знаю, что могу получить возвращаемые значения, захватив входной поток

session.getInputStream();

Проблема, с которой я, похоже, сталкиваюсь, заключается в том, что объект сеанса (и команда) спроектирован как способ «используй один раз, а затем выбрасывай».Итак, имея это в виду, я хочу закрыть сеанс, как только я закончу с ним, чтобы очистить ресурсы, т.е.

commandObject.close();

Однако из-за асинхронного характера sshj я не могу определитькогда возвращаемое значение доступно во входном потоке, так как, кажется, нет встроенной функции обратного вызова.

Единственный способ, которым я могу обойти эту проблему, - это спать в течение предварительно определенного периода перед проверкой.входящий поток.Однако я чувствую, что это всего лишь взлом, и я надеюсь, что есть лучшее решение для всего этого.

У кого-нибудь были подобные проблемы с использованием sshj?С какими возможными решениями?

Приветствия!

1 Ответ

0 голосов
/ 22 октября 2011

Вы можете вызвать join () для объекта Session, и после завершения команды этот метод вернется (или, если время ожидания истекло).Затем вы можете проверить код выхода с помощью getExitCode () -> Integer, который может быть нулевым, если код выхода не получен.

Редактировать: под значениями возврата вы подразумевали вывод, сгенерированный командой?InputStream, восстановленный getInputStream () или getErrorStream (), реализует метод available (), поэтому вы можете реализовать решение на его основе.

...