- Когда я пробую указать путь к файлу сам по себе, т. е. ... = new ProcessBuilder(processPath);, я получаю исключение IOException, сообщающее мне, что файл не является допустимым приложением Win32.
- Когда я пытаюсь проследить путь к файлу с помощью Аргумент "python" - т.е. new ProcessBuilder(processPath, "python"); ИЛИ new ProcessBuilder(List.of(processPath, "python")); - происходит то же самое.
- Когда я пытаюсь предварить путь к файлу словом "python" (как это наиболее распространенное форматирование, встречающееся в других вопросах о переполнении стека по этой теме), программа вместо этого пытается и не удается найти файл приложения с именем "python"!
РЕДАКТИРОВАНИЕ:
Вот соответствующий код:
Код: Выделить всё
@Override
public void run() {
System.out.println("Working Directory = " + PCB.getProcessPath()); // debug print;
running = true;
PCB.callState("running");
ProcessBuilder Build = new ProcessBuilder("python", PCB.getProcessPath());
Process prcss = null;
try {
prcss = Build.start();
prcss.waitFor();
}
catch (InterruptedException | IOException e) {
PCB.callState("interrupted!"); // debug print;
e.printStackTrace();
}
String output = prcss.getInputStream().toString();
PCB.setPCBResult(output);
System.out.println("Output: " + output);
running = false;
PCB.callState("finished");
}
- PCB — это экземпляр специального предварительно написанного класса ProcessControlBlock, который мы должны использовать.
- CallState() — это созданный мной собственный удобный метод, который просто устанавливает, а затем печатает статус платы.
- Нам рекомендуется использовать ProcessBuilder вместо RunTime.exec(); Я не думаю, что это обязательно, но я немного не в курсе, поэтому стараюсь следовать рекомендациям.