Ожидание вывода навсегда при запуске команд с ProcessBuilder в Ubuntu - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь получить результаты выполнения команды в Ubuntu с ProcessBuilder. Я пытался получить результат вывода из следующих методов. Но результат не отображается, программа ожидает без вывода.

Выполнение команды:

 String[] args = new String[]{"/bin/bash", "-c", "pandoc -f html - t asciidoc input.html"};
Process process = new ProcessBuilder(args).start();

Получение метода вывода 1:

InputStream inputStream = process.getInputStream();
StringWriter stringWriter = new StringWriter();
IOUtils.copy(inputStream, stringWriter, "UTF-8");
// Waiting
String asciidocoutput = writer.toString();

Получение метода вывода 2:

BufferedReader reader= new BufferedReader(new InputStreamReader(process.getInputStream()));
StringBuilder builder = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
// Waiting
 builder.append(line);
builder.append(System.getProperty("line.separator"));
}
String result = builder.toString();

1 Ответ

0 голосов
/ 17 сентября 2018
Конструктор

ProcessBuilder принимает команду, и каждая последующая строка обрабатывается как аргумент для первой строки, распознаваемой как основная команда.

Попробуйте заменить /bin/bash на pandoc и посмотрите, работает ли он.

Со своей стороны, я смог выполнить произвольную команду без помощи ProcessBuilder, используя вместо этого Runtime.getRuntime().exec(...), например:

public static void main(String[] args) throws Exception {
    Process proc = Runtime.getRuntime().exec("cmd /c ipconfig");

    BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
    String line = null;
    while((line = reader.readLine()) != null){
        System.out.println(line);
    }
}

Получение ожидаемого результата:

Configurazione IP di Windows


Scheda Ethernet Ethernet:

   Suffisso DNS specifico per connessione: 
   Indirizzo IPv6 locale rispetto al collegamento . : fe80::fcba:735a:5941:5cdc%11
   Indirizzo IPv4. . . . . . . . . . . . : 192.168.0.116
   Subnet mask . . . . . . . . . . . . . : 255.255.255.0
   Gateway predefinito . . . . . . . . . : 192.168.0.1

Process finished with exit code 0

Если вам действительно нужно использовать ProcessBuilder, того же поведения можно добиться, определив свой Process следующим образом:

Process proc = new ProcessBuilder("ipconfig").start();

просто вызывая команду, которую вы хотите запустить.

...