【问题标题】:Python on Jar - Running python Script after process end in JavaJar 上的 Python - 在 Java 中进程结束后运行 python 脚本
【发布时间】:2019-02-19 04:37:56
【问题描述】:

我想在 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);

我做错了吗?还是我错过了什么?任何帮助将不胜感激!

【问题讨论】:

  • 更改为ProcessBuilder builder = new ProcessBuilder("python3","/home/pi/Desktop/ML/scripts/image-label.py"); 应该可以。让我知道这是否有效,将添加为答案
  • 会的!现在试试这个。不过有一个问题,我应该把-m放在哪里?会像 ProcessBuilder("python3 -m","directory") 还是像 ProcessBuilder("python3","-m","*directory)?

标签: java python python-3.x processbuilder runtime.exec


【解决方案1】:

我已尝试使用以下代码,它工作正常,虽然我没有尝试使用 -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);
    }

【讨论】:

  • 这行得通!非常感谢!我发现我真的不需要将它作为模块运行。我刚刚删除了 -m ,它就像一个魅力。谢谢!
猜你喜欢
  • 2015-09-20
  • 2014-12-17
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多