Я написал небольшое клиент-серверное приложение, которое может выполнять системные команды удаленно. Он отлично работает с неинтерактивными программами, когда вам нужно только прочитать их вывод. Однако есть ли надежный способ отправить пользовательский ввод в процесс, начатый с того, что он требует его? Как я могу узнать, запрашивает ли процесс какой-либо ввод?Выполнение интерактивной программы CLI удаленно
ответ
Взгляните на '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();
Проблема заключается в том, что пользователь, выполняющий удаленную программу через моего клиента, не знает, чего ожидать. Он должен быть запрошен для ввода всякий раз, когда это требует удаленный процесс. – Ree
О, я думаю, теперь вижу, что ты сделал. Хорошо, вы можете просто прочитать из выходного потока процесса. например System.exec() возвращает Process, который дает выходной поток следующим образом: Process.getOutputStream(). Затем вы отправите пользовательский ввод в InputStream процесса. Имеет смысл? – laher
Как я узнаю, что мне нужно отправить любой ввод? – Ree
- 1. Выполнение программы с инструкцией CLI
- 2. Выполнение Java-программы удаленно с Java
- 3. Параллельное выполнение программы в C++/CLI
- 4. Вызов JIRA CLI удаленно
- 5. Компиляция и выполнение Java удаленно
- 6. завершение интерактивной программы из партии
- 7. Запуск интерактивной программы от Ruby
- 8. Выполнение сценария node.js удаленно
- 9. Выполнение команды python удаленно
- 10. Выполнение PowerShell удаленно выдавать
- 11. Удаленное выполнение программы
- 12. Выполнение локально заданной функции удаленно
- 13. Выполнение программы
- 14. Рефакторинг программы CLI Ruby
- 15. C++/Cli программы System.BadImageFormatException
- 16. Выполнение другой программы в C++
- 17. Запустить gnome-терминал с помощью интерактивной программы
- 18. Как написать тест для интерактивной текстовой программы?
- 19. Запуск интерактивной программы с apache ant
- 20. Завершение интерактивной программы вызывает бесконечный цикл
- 21. Частичная автоматизация интерактивной программы с Expect
- 22. Запуск интерактивной программы Dart из другой программы Dart
- 23. Выполнение программы из программы C
- 24. Выполнение программы из PHP-скрипта
- 25. Python Fabric: выполнение интерактивной программы, например, меньше на пульте дистанционного управления?
- 26. Пуск программы или пути к файлу удаленно
- 27. Выполнение PHP через Linux CLI
- 28. Выполнение команд CLI с Java
- 29. CakePHP CLI Выполнение командной строки
- 30. Выполнение команд CLI в php
Вы смотрели с помощью SSH? (через библиотеку Java, такую как jSSH). Похоже, что вы пытаетесь сделать очень похоже. Возможно, вы можете принять несколько идей от того, как это работает (или просто использовать его, поскольку вам не нужна Java, установленная на сервере, и он работает) –
Мне действительно не нужен SSH, он выглядит слишком сложным для простой системы, что я иметь. Я хотел бы реализовать это, используя стандартные библиотеки Java (если это вообще возможно). – Ree
Существуют библиотеки Java, которые поддерживают SSH. Вам нужен SSH-сервер, который тривиально для Linux и довольно прост для Windows. –