Python on Jar - 运行 python 进程结束后的脚本在 Java
Python on Jar - Running python Script after process end in Java
我想在 RPi 的相机模块使用 jar 文件捕获照片后 运行 一个 python 脚本(tensorflow 的图像标签脚本)。我已经尝试了 Runtime 和 ProcessBuilder,但它说找不到文件或目录。
这是我的运行时代码:
Process rt = Runtime.getRuntime().exec("python3 -m scripts.image-label.py");
rt.waitFor();
BufferedReader in = new BufferedReader(new InputStreamReader(rt.getInputStream()));
String read = in.readLine();
ML = read;
result resfin = new result();
resfin.setVisible(true);
这是我的 ProcessBuilder 的代码:
ProcessBuilder builder = new ProcessBuilder("/home/pi/Desktop/ML/scripts/image-label.py");
Process np = builder.start();
np.waitFor();
BufferedReader in = new BufferedReader(new InputStreamReader(np.getInputStream()));
String read = in.readLine();
ML = read;
result resfin = new result();
resfin.setVisible(true);
我做错了什么吗?或者我错过了什么?任何帮助将不胜感激!
我试过下面的代码,它工作正常,虽然我没有尝试使用 -m "module" 标志,因为我不知道如何在 python 中创建模块文件.
发现一些代码问题:
1. 您需要将 python3 作为参数传递给流程构建器,如下所示
2. 为 python 文件提供绝对路径。
3. 您可以毫无问题地使用 Runtime 或 ProcessBuilder。
// Process rt = Runtime.getRuntime().exec("python3 -m /Users/<user-name>/demo/JavaNotepad/src/main/java/com/mypython.py");
ProcessBuilder builder = new ProcessBuilder("python3", "-m", "/Users/<user-name>/demo/JavaNotepad/src/main/java/com/mypython.py");
Process rt = builder.start();
int exitCode = rt.waitFor();
System.out.println("Process exited with : " + exitCode);
BufferedReader in = new BufferedReader(new InputStreamReader(rt.getInputStream()));
BufferedReader err = new BufferedReader(new InputStreamReader(rt.getErrorStream()));
System.out.println("Python file output:");
String line;
BufferedReader reader;
if (exitCode != 0) {
reader = err;
} else {
reader = in;
}
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
我想在 RPi 的相机模块使用 jar 文件捕获照片后 运行 一个 python 脚本(tensorflow 的图像标签脚本)。我已经尝试了 Runtime 和 ProcessBuilder,但它说找不到文件或目录。
这是我的运行时代码:
Process rt = Runtime.getRuntime().exec("python3 -m scripts.image-label.py");
rt.waitFor();
BufferedReader in = new BufferedReader(new InputStreamReader(rt.getInputStream()));
String read = in.readLine();
ML = read;
result resfin = new result();
resfin.setVisible(true);
这是我的 ProcessBuilder 的代码:
ProcessBuilder builder = new ProcessBuilder("/home/pi/Desktop/ML/scripts/image-label.py");
Process np = builder.start();
np.waitFor();
BufferedReader in = new BufferedReader(new InputStreamReader(np.getInputStream()));
String read = in.readLine();
ML = read;
result resfin = new result();
resfin.setVisible(true);
我做错了什么吗?或者我错过了什么?任何帮助将不胜感激!
我试过下面的代码,它工作正常,虽然我没有尝试使用 -m "module" 标志,因为我不知道如何在 python 中创建模块文件.
发现一些代码问题:
1. 您需要将 python3 作为参数传递给流程构建器,如下所示
2. 为 python 文件提供绝对路径。
3. 您可以毫无问题地使用 Runtime 或 ProcessBuilder。
// Process rt = Runtime.getRuntime().exec("python3 -m /Users/<user-name>/demo/JavaNotepad/src/main/java/com/mypython.py");
ProcessBuilder builder = new ProcessBuilder("python3", "-m", "/Users/<user-name>/demo/JavaNotepad/src/main/java/com/mypython.py");
Process rt = builder.start();
int exitCode = rt.waitFor();
System.out.println("Process exited with : " + exitCode);
BufferedReader in = new BufferedReader(new InputStreamReader(rt.getInputStream()));
BufferedReader err = new BufferedReader(new InputStreamReader(rt.getErrorStream()));
System.out.println("Python file output:");
String line;
BufferedReader reader;
if (exitCode != 0) {
reader = err;
} else {
reader = in;
}
while ((line = reader.readLine()) != null) {
System.out.println(line);
}