2011-12-15 4 views
0

Я написал небольшое клиент-серверное приложение, которое может выполнять системные команды удаленно. Он отлично работает с неинтерактивными программами, когда вам нужно только прочитать их вывод. Однако есть ли надежный способ отправить пользовательский ввод в процесс, начатый с того, что он требует его? Как я могу узнать, запрашивает ли процесс какой-либо ввод?Выполнение интерактивной программы CLI удаленно

+0

Вы смотрели с помощью SSH? (через библиотеку Java, такую ​​как jSSH). Похоже, что вы пытаетесь сделать очень похоже. Возможно, вы можете принять несколько идей от того, как это работает (или просто использовать его, поскольку вам не нужна Java, установленная на сервере, и он работает) –

+0

Мне действительно не нужен SSH, он выглядит слишком сложным для простой системы, что я иметь. Я хотел бы реализовать это, используя стандартные библиотеки Java (если это вообще возможно). – Ree

+0

Существуют библиотеки Java, которые поддерживают SSH. Вам нужен SSH-сервер, который тривиально для Linux и довольно прост для Windows. –

ответ

1

Взгляните на 'expectj'. Это порт http://en.wikipedia.org/wiki/Expect

http://expectj.sourceforge.net/

Пример:

// Create a new ExpectJ object with a timeout of 5s 
ExpectJ expectinator = new ExpectJ(5); 

// Fork the process 
Spawn shell = expectinator.spawn("/bin/sh"); 

// Talk to it 
shell.send("echo Chunder\n"); 
shell.expect("Chunder"); 
shell.send("exit\n"); 
shell.expectClose(); 
+0

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

+0

О, я думаю, теперь вижу, что ты сделал. Хорошо, вы можете просто прочитать из выходного потока процесса. например System.exec() возвращает Process, который дает выходной поток следующим образом: Process.getOutputStream(). Затем вы отправите пользовательский ввод в InputStream процесса. Имеет смысл? – laher

+0

Как я узнаю, что мне нужно отправить любой ввод? – Ree

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