Вы можете использовать API-интерфейс ProcessBuilder, перенаправив вывод в файл, а затем дождаться результата.
public class Main {
public static final String PYTHON_PATH = "D:\\Anaconda3\\python.exe";
public static final String PATH_TO_SCRIPT = "D:\\projects\\StartScript\\test.py";
public static void main(String[] args) throws IOException, InterruptedException {
ProcessBuilder builder = new ProcessBuilder();
builder.command(PYTHON_PATH, PATH_TO_SCRIPT);
// Redirect output to a file
builder.redirectOutput(new File("output.txt"));
builder.start().waitFor();
// Print output to console
ProcessBuilder.Redirect output = builder.redirectOutput();
File outputFile = output.file();
BufferedReader br = new BufferedReader(new FileReader(outputFile));
String st;
while ((st = br.readLine()) != null) {
System.out.println(st);
}
}
}
Файл python test.py содержит простую инструкцию print:
print("Hello from python")
Полагаю, было бы еще проще, если бы вам не нужно было ждать результата.
Использование Process API также должно работать.
Как и в вашем примере (я использую те же константы, которые указаны выше):
Process p = Runtime.getRuntime().exec(PYTHON_PATH + " " + PATH_TO_SCRIPT);
p.waitFor();
byte[] buffer = new byte[1024];
byte[] errBuffer = new byte[1024];
p.getInputStream().read(buffer);
p.getErrorStream().read(errBuffer);
System.out.println(new String(buffer));
System.out.println(new String(errBuffer));
Чтобы увидеть вывод оператора print, вам нужно подождать и перенаправить потоки. То же самое для потока ошибок.
Теперь, если вы сломаете скрипт на python, как это:
print("Hello from python')
Вы также должны увидеть распечатанную ошибку.