ProcessBuilder GetOutPutStream и взаимодействие с процессами
Вопрос
У меня проблемы с взаимодействием с процессом с помощью getOutputStream.Вот мой код:
родовое словоВот результат:
родовое словоthis.sh просто запускает "gksudo apt-get install firefox"
Я не знаю, почему он прерывается и не принимает мой ввод "Y", спасибо.
Решение
Есть несколько проблем.
Первое : gksudo(1)
выполняет некоторые грязные нестандартные трюки со стандартным вводом и стандартным выводом команд, которые он запускает. Это ужасно не удается. Хороший пример - это командная строка:
Я ожидал бы любого вывода и прерывания кода cat
, как только код echo
доставит данные. Неа. И gksudo
, и cat
существуют вечно. Нет вывода.
Ваш вариант использования
родовое словои это тоже не сработает. Пока эта проблема не решена, вы можете забыть о любом удаленном управлении, если запущенная программа требует какого-либо пользовательского ввода.
Второй : как уже указывал Роджер, waitFor()
ожидает завершения команды. Это не произойдет в ближайшее время без какого-либо вмешательства пользователя и из-за проблемы с gksudo.
Третий . После небольшого изменения кода waitFor
появляется следующий блокировщик: вы ждете завершения вывода процесса до EOF включительно. Это не произойдет в ближайшее время (см. «Первое» и «второе»).
Четвертый . Только после того, как процесс уже дважды мертв (см. «второй» и «третий»), он может получить некоторый ввод - ваш код генерируемого кода (для которого также может потребоваться дополнительный код кодового кода).
Вместо решения этой кучи проблем может быть лучший и гораздо более простой способ: не пытаться управлять генератором кодовых меток с помощью стандартного ввода. Просто дайте ему несколько подходящих вариантов, которые автоматически «ответят» на ваши вопросы. Быстрый сгенерированный кодовый код открывает некоторых кандидатов:
родовое словоПодробнее см. в руководстве.
Думаю, это лучший и стабильный способ.
PS: Прямо сейчас я немного пи *** o *** Y
, прошу прощения за тираду выше.