Как ответить на команду из Терминала в Java - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу выполнить команду из Java, но эта команда хочет, чтобы я дал ей имя пользователя.

Как в этом примере:

$ моя команда

[команда] Имя пользователя: _

Итак, как я могу дать команде свое имя пользователя на Java?

В настоящее время мой код выглядит так:

    Process p = Runtime.getRuntime().exec(command);
    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String s;
    while ((s = br.readLine()) != null){
        System.out.println(s);
    }
    br.close();
    p.waitFor();
    p.destroy();

1 Ответ

0 голосов
/ 18 сентября 2018

Вам нужно создать еще один поток и ввести пользовательский ввод через process#getOutputStream().См. Следующий пример:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class ProcessWithInput {

    public static void main(String[] args) throws IOException, InterruptedException {
        Process p = Runtime.getRuntime().exec("cat");
        OutputStream os = p.getOutputStream();
        os.write("Hello World".getBytes());
        os.close();
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String s;
        while ((s = br.readLine()) != null) {
            System.out.println(s);
        }
        br.close();
        p.waitFor();
        p.destroy();
    }
}

Конечно, вам нужно правильно обрабатывать ошибки / исключения и т. Д.

Другой вариант - использовать ProcessBuilder, который позволяет вам вводить данные через файл.

...