2012-04-25 4 views
0

Я пытаюсь запустить новый процесс с использованием Runtime.exec(), но моя проблема заключается в использовании ssh для удаленного доступа, а затем запустить там java-программу. Код:Java Runtime.exec() с ssh в Linux-проблемах

test = "ssh -t [email protected] java packageName.ClassName portNumber (Other command line args for this class)" 
Process proc = Runtime.getRuntime().exec(new String[] {"/bin/bash", "-c", test}); 

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

Примечание: если я запустил ssh -t [email protected] java packageName.ClassName portNumber (Other command line args for this class) из командной строки, он отлично работает. У меня есть настройка хоста, чтобы не требовать пароль с помощью ssh-ключей.

Любые идеи?

ответ

2

Для получения результата от создаваемого подпроцесса вам необходимо использовать Process.getInputStream.

См. this article для хорошей дискуссии на Runtime.exec.

1

Я думаю, вы можете запросить поток ввода, соответствующий этапу процесса, а затем распечатать его на стандартном выходе. Если вам нужно увидеть его после его выполнения, просто вызовите метод waitFor() для процесса, чтобы он закончил работу перед началом печати.

1

Используйте getInputStream() для доступа к исходному выпуску возвращаемого процесса. Вы также можете воспользоваться услугами, предоставляемыми ProcessBuilder.Redirect.

5

Использование Runtime для такой вещи - плохая практика. Вам следует сделать это с помощью jsch или аналогичной библиотеки.

+0

+1 Jsch works _really_ хорошо для всех вещей ssh ​​и sftp. – Gray

+0

Я больше не мог согласиться. Избегайте 'Runtime.exec()' любой ценой, особенно если доступна чистая библиотека Java. –

+0

+1 Я никогда не знал о jsch до сих пор –

Смежные вопросы