Как выполнить команды в последовательности, используя Processbuilder - PullRequest
0 голосов
/ 10 мая 2018

Я хочу выполнить 2 команды в операционной системе Windows (одна - командный файл, а другая - скрипт Python) с использованием Java Process Builder. Но, к сожалению, не в состоянии сделать это. Я пробовал много способов.

List<String> commands = new ArrayList<String>();
                commands.add("Testbatch.bat");
                commands.add("Python.exe");
                commands.add("TestPythonScript.py");
                ProcessBuilder probuilder = new ProcessBuilder(commands);
                Process process = probuilder.start();

Здесь выполняется пакетный файл, но не питон. Здесь Process Builder рассматривает команды как аргументы, кроме первой Также пробовал подход ниже, но не повезло.

String [] commands={"CMD","/C","Testbatch.bat","Python.exe","TestPythonScript.py"};
ProcessBuilder probuilder = new ProcessBuilder(commands);
Process process = probuilder.start();

Ничто не помогло мне выполнить команды последовательно (одна за другой) с помощью ProcessBuilder, я почти потратил 3 дня, но не смог найти правильный подход. Может ли кто-нибудь, пожалуйста, предложить мне подход для достижения того же.

Спасибо

Sudheer

1 Ответ

0 голосов
/ 10 мая 2018

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

Чтобы выполнить более одной команды, вам нужно создать новый ProcessBuilder для каждой.

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

Способ, которым вы делаете это, заключается в том, чтобы взять объект Process, возвращаемый ProcessBuilder.start(), и использовать его метод waitFor() для ожидания завершения каждой команды.

...