запустить скрипт Python из пакетного файла не работает с помощью Java ProcessBuilder - PullRequest
0 голосов
/ 02 мая 2019

Мне нужно запустить пакетный файл из кода Java, в котором должен выполняться скрипт Python, и он не работает.

Запустите пакетный файл двойным щелчком, скрипт Python выполняется правильно. Запустить пакетный файл с JAVA ProcessBuilder не работает полностью. вывод текста из пакетного файла (-> echo), но python не вызывается. Как я могу это исправить? Я даже пытался запустить Python Script напрямую с ProcessBuilder, но вывод тоже не генерируется.

запуск Python напрямую в JAVA

String pyPath = "D:/<...>/my_py_file.py";
ProcessBuilder pb = new ProcessBuilder("cmd","/c","D:/Python27/ArcGISx6410.5/python",pyPath);
Process proc = pb.start();

Это не работает так же, как:

запустить пакетный файл в JAVA, вызвав my_py_file.py

ProcessBuilder pb = new ProcessBuilder("cmd","/c","D:/<...>/my_bat_file.bat");
Process proc = pb.start();

Это мой bat-файл:

@echo execute script
@echo off
cd\
d:
cd Python27/ArcGISx6410.5
@echo Python Version
python -V
@echo start script
python D:/<..>/my_py_file.py
exit

ВЫВОД двойным щелчком:

execute script
Python Version
Python 2.7.13
start script
**pythonOutput**

ВЫХОД с помощью ProcessBuilder:

execute script
Python Version
start script
*nothing*

1 Ответ

0 голосов
/ 02 мая 2019

Я думаю, что в вашей реализации "запуска Python непосредственно в JAVA" отсутствует то, что вы не обрабатываете вывод после Process proc = pb.start();

Например, вы можете перенаправить поток вывода в файлкак это:

pb.redirectOutput(Redirect.appendTo(FILENAME));

(указанный файл должен быть уже создан до перенаправления туда)

Или вы можете направить его в InputStream, который вы вводите в InputStreamReader для дальнейшей обработки, например, так::

BufferedReader br = new BufferedReader(new InputStreamReader(pb.getInputStream()));

Так или иначе, добавьте его после Process proc = pb.start();

...