Запуск python скрипта из jar файла - PullRequest
0 голосов
/ 27 мая 2020

Я работал над приложением java, которое использует сценарий python для запуска некоторой трехмерной визуализации, он работал, когда я запускал его из intellij, но как только я создал файл jar, он просто не запускается. ОС: MA C ОС

Как запустить скрипт: Process p1 = Runtime.getRuntime().exec("python3 vizualize3D.py");

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

У проблемы было несколько уровней и решений: 1. Я не поместил файл .py в конфигурацию сборки jar 2. После его установки я всегда получал исключение, что он равен null из-за опечатки в коде 3. После нескольких попыток способы запустить это сработало Невозможно запустить python скрипт из java jar . Важно проверить, добавили ли вы файл py в конфигурацию сборки, и правильно запустить его, поскольку python не может извлекать файлы из zip и сжатых состояний.

0 голосов
/ 27 мая 2020

Предполагая, что сценарий находится в файле jar, вы можете получить входной поток из ресурса и использовать его в качестве входных данных для Process, созданного интерпретатором python:

// Note: the path to the script here is relative to the current class
// and follows strict resource name rules, since this is in a jar file
InputStream script = getClass().getResourceAsStream("visualize3D.py");

// The following creates a process to run python3.
// This assumes python3 is on the system path. Provide the full
// path to the python3 interpreter (e.g. /usr/bin/python3) if it's
// not on the path.

// The - option to python3 instructs it to execute a script provided
// as standard input.

Process process = new ProcessBuilder("python3", "-")
    .start() ;
OutputStream out = process.getOutputStream();
byte[] buffer = new byte[1024];
int read = 0;
while((read = script.read(buffer)) != -1) {
    pos.write(buffer, 0, read);
}
script.close();

Подробнее о том, как получить правильный путь для сценария, см. В разделе Как определить правильный путь для файлов F XML, CSS файлов, изображений и других ресурсов, необходимых моему приложению JavaFX?

...