Java Unix Terminal - PullRequest
       6

Java Unix Terminal

0 голосов
/ 06 декабря 2011

Я пытаюсь написать эмулятор терминала Unix в Java.У меня много проблем.Не похоже, что я могу изменить рабочий каталог программы, поэтому такие команды, как «cd», не работают должным образом.Мой вопрос заключается в следующем: если я запускаю команду, требующую ввода данных от пользователя, есть ли способ отправить эти данные в запущенный процесс?

Большое спасибо, это очень помогло.Вот пример: InputStream in = null;OutputStream outS = null;

    StringBuffer commandResult = new StringBuffer();
    String line = null;
    int readInt;


    p = Runtime.getRuntime().exec("gksudo apt-get install firefox");

    int returnVal = p.waitFor();


    in = p.getInputStream();



    while ((readInt = in.read()) != -1)
        commandResult.append((char)readInt);
    outS = (BufferedOutputStream) p.getOutputStream();
    outS.write("Y".getBytes());
    outS.close();

    System.out.println(commandResult.toString());
    in.close();

Это вывод:

Reading package lists...
Building dependency tree...
Reading state information...
The following packages were automatically installed and are no longer required:
  libmono2.0-cil libmono-data-tds2.0-cil libmono-system-data2.0-cil
  libdbus-glib1.0-cil librsvg2-2.18-cil libvncserver0 libsqlite0
  libmono-messaging2.0-cil libmono-system-messaging2.0-cil
  libmono-system-data-linq2.0-cil libmono-sqlite2.0-cil
  libmono-system-web2.0-cil libwnck2.20-cil libgnome-keyring1.0-cil
  libdbus1.0-cil libmono-wcf3.0-cil libgdiplus libgnomedesktop2.20-cil
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  firefox-globalmenu
Suggested packages:
  firefox-gnome-support firefox-kde-support latex-xft-fonts
The following NEW packages will be installed:
  firefox firefox-globalmenu
0 upgraded, 2 newly installed, 0 to remove and 5 not upgraded.
Need to get 15.2 MB of archives.
After this operation, 30.6 MB of additional disk space will be used.
Do you want to continue [Y/n]? Abort.

Почему он прерывается, прежде чем я могу передать по каналу в "Y"?

1 Ответ

2 голосов
/ 06 декабря 2011

Да;см. Process#getOutputStream(), чтобы получить поток "стандартного ввода" (stdin) для объекта Process.

Что касается вопроса об изменении каталога, я не понимаюне верю, что JVM может изменить свой рабочий каталог после запуска.Тем не менее, ваша программа может смоделировать идею «текущего рабочего каталога» как переменной, которую она использует при выполнении действий, относящихся к этому расположению (например, запуск процессов, просмотр содержимого каталога и т. Д.).ProcessBuilder класс даже может установить рабочий каталог для процессов, которые он производит.

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