Есть несколько проблем.
Первый : gksudo(1)
выполняет некоторые грязные, нестандартные приемы со стандартным вводом и стандартным выводом команд, которые он запускает. Это терпит неудачу ужасно. Хорошим примером является эта командная строка:
$ echo foo | gksudo -g cat
Я ожидал бы любой вывод и завершение cat
, как только echo
доставит данные. Нету. И gksudo
, и cat
вечно торчат. Нет вывода.
Ваш вариант использования будет
echo y |gksudo apt-get install ....
и это тоже не сработает. Пока это не решено, вы можете забыть сделать любое дистанционное управление, если запущенная программа требует какого-либо пользовательского ввода.
Секунда : Как уже указывал Роджер, waitFor()
ожидает завершения команды. Это не произойдет в ближайшее время без участия пользователя и проблемы gksudo.
Третий После небольшого сброса waitFor
появляется следующий блокировщик: Вы ожидаете выхода complete процесса вплоть до EOF. Это не произойдет в ближайшее время (см. «Первое» и «второе»).
Четвертый Только после того, как процесс уже дважды мертв (см. «Второй» и «третий»), он может получить некоторый ввод - ваш Y
(который также может потребовать дополнительный \n
).
Вместо решения этой группы проблем может быть лучший и более простой способ: не пытайтесь управлять apt-get install
стандартным вводом. Просто дайте ему несколько подходящих опций, которые автоматически «отвечают» на ваши вопросы. Быстрый man apt-get
вызывает некоторых кандидатов:
-y, --yes, --assume-yes
--force-yes
--trivial-only
--no-remove
--no-upgrade
Подробнее см. В руководстве.
Я думаю, что это лучший и более стабильный способ.
PS: Прямо сейчас я немного пи *** о *** gksudo
, так что извините рассудок выше.