Python на Jar - Запуск скрипта Python после завершения процесса в Java - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу запустить скрипт python (скрипт метки изображения tenorflow) после того, как модуль камеры RPi сделает снимок с помощью файла jar.Я пробовал и 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);

Я что-то не так делаю?Или я что-то упустил?Любая помощь будет оценена!

1 Ответ

0 голосов
/ 19 февраля 2019

Я пробовал с помощью следующего кода, он работает нормально, хотя я не пробовал с флагом -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);
    }
...