Как вводить в Java External Process [дубликат]

Я отправляю этот ответ, потому что мой интерфейс администратора Virtualmin / Webmin решил, что было бы неплохо отключить мой PHP-движок. Я нашел время, чтобы найти решение, поэтому я решил поделиться с ним вы, ребята:

Также не забудьте проверить, что ни один из ваших конфигурационных файлов вашего сайта, связанных с этим конкретным хостом или виртуальным хостом, не имеет в них php_admin_value, которые отключают PHP, например:

php_admin_value engine Off

В случае сомнений прокомментируйте это ...

# php_admin_value engine Off

И перезагрузите свой веб-сервер.

6
задан aioobe 30 November 2014 в 12:58
поделиться

4 ответа

Посмотрите на ProcessBuilder. После того, как вы настроили ProcessBuilder и выполнили start, у вас будет дескриптор Process, на который вы можете подать вход и прочитать вывод.

Вот фрагмент, который поможет вам начать :

ProcessBuilder pb = new ProcessBuilder("/bin/bash");
Process proc = pb.start();

// Start reading from the program
final Scanner in = new Scanner(proc.getInputStream());
new Thread() {
    public void run() {
        while (in.hasNextLine())
            System.out.println(in.nextLine());
    }
}.start();

// Write a few commands to the program.
PrintWriter out = new PrintWriter(proc.getOutputStream());
out.println("touch hello1");
out.flush();

out.println("touch hello2");
out.flush();

out.println("ls -la hel*");
out.flush();

out.close();

Выход:

-rw-r--r-- 1 aioobe aioobe 0 2011-04-08 08:29 hello1
-rw-r--r-- 1 aioobe aioobe 0 2011-04-08 08:29 hello2
11
ответ дан aioobe 21 August 2018 в 19:11
поделиться
  • 1
    Я пробовал это, но так как моя внешняя программа ждет stdin, она блокируется, поэтому я не получаю контроль от моего метода вызова. Мне нужно управление обратно, так как вход в внешнюю программу генерируется позже. – j.lee 8 April 2011 в 07:27
  • 2
    Вероятно, это чтение из внешней программы, которая блокирует. Вам нужно поместить это в отдельный поток, если вы точно не знаете, что читать. – aioobe 8 April 2011 в 07:30
  • 3
    Благодаря! Ваш ответ - именно то, что я искал. – j.lee 8 April 2011 в 08:23

Я думаю, вы найдете Javadoc для класса java.lang.Process полезным. Следует отметить, что вы можете получать входные и выходные потоки из процесса для связи с ним во время его работы.

0
ответ дан ChrisH 21 August 2018 в 19:11
поделиться

Я отвечу на вопрос об использовании ProcessBuilder. Если вы хотите узнать более подробную информацию об этом и почему вы должны предпочесть его Runtime.exec(), см. Эту запись в глоссарии Java . Он также показывает, как использовать потоки для связи с внешним процессом.

0
ответ дан Christoph Seibert 21 August 2018 в 19:11
поделиться

Вы можете запустить внешнее приложение с помощью Runtime.getRuntime (). exec (...)

Чтобы отправить данные во внешнюю программу, вы можете либо отправить данные в выходной поток Processes (вы получаете объект процесса обратно из exec), или вы можете открывать сокеты и сообщать об этом.

2
ответ дан MeBigFatGuy 21 August 2018 в 19:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: