Понимание примера кода для Processbuilder в Java - PullRequest
0 голосов
/ 04 мая 2019

У меня есть пример кода, в котором используется построитель процессов и даны две команды для выполнения, но я не могу полностью понять, что делает каждая строка кода.

Также кажется, что команды на самом деле не выполняются.

Код:

public static void main(String[] args) {

    ArrayList<String> commands = new ArrayList(); // commands in a processbuilder is an Arraylist of of strings
    commands.add("myfile.pdf"); // supposed to open the file?
    commands.add("bash\", \"-c\", \"ls"); // supposed to use ls command in terminal
    execute(commands); // should execute the two commands above
    System.out.println("executed commands"); // only thing that actually happens
}

public static void execute(ArrayList<String> command) {
    try {
        ProcessBuilder builder = new ProcessBuilder(command); // a new builder which takes a command passed into the method
        Map<String, String> environ = builder.environment(); // ???
        Process p = builder.start(); // p is never used?
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Я не получаю ошибок или предупреждений.

Пробовал читать API на сборщике процессов, но я не совсем понял

1 Ответ

1 голос
/ 04 мая 2019

ProcessBuilder помогает запускать внешние процессы.

Сначала части командной строки (исполняемый файл, параметры) берутся за список String, что очень удобно.(«command» вводит в заблуждение, поскольку состоит из исполняемого файла и параметров).

Во-вторых, вы можете редактировать среду нового процесса (переменные среды, такие как «$HOME», «* 1009»).* "и т. д.).

Ваш p может использоваться, например, для проверки, завершился ли процесс, или для получения ввода / вывода нового процесса.Поскольку вы только запускаете процесс (запускайте и забывайте), он вам здесь не нужен.

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

...