Я загрузил pyboof, которые являются оболочками python в java. Итак, мой вопрос в том, как именно я могу их использовать? Я написал простую программу, которая открывает командную оболочку и запускает оттуда оболочку. Моя программа указана выше:
package alltestshere;
import java.awt.image.BufferedImage;
import java.io.* ;
import boofcv.io.UtilIO;
import boofcv.io.image.UtilImageIO;
public class PythonCaller {
public static void main (String [] args) throws IOException {
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("cmd set PATH = C:\\Python27");
Process pr2 = rt.exec("cmd python27 C:\\Users\\Caterina\\Downloads\\PyBoof-master\\PyBoof-master\\examples\\blur_image.py");
Process pr3 = rt.exec("cmd blur_image.py");
}
}
Но при запуске ничего не происходит. Я также пытаюсь запустить файл py "blur_image" в оболочке python, но он просто открывает файл, а я хочу посмотреть, как изменилось изображение (новое изображение). Итак, это неправильный способ использовать оболочки Python или мне нужно сделать что-то еще, чтобы использовать оболочки? Обертку blur_image можно найти здесь https://github.com/lessthanoptimal/PyBoof/blob/master/examples/blur_image.py.
Хорошо, большое спасибо!! Кажется, что-то не так!




Скрипт для запуска python из Java может выглядеть следующим образом:
String script = "C:\\Users\\Caterina\\Downloads\\PyBoof-master\\PyBoof-master\\examples\\blur_image.py";
String python_app = "python27"
Process pr = rt.exec(new String[]{python_app, script})
После запуска процесса вам нужно дождаться его завершения, выполнив следующие действия:
pr.waitFor()
Если ожидается, что сценарий напишет какой-то вывод или прочитает какой-то ввод, вам следует прочитать вывод и написать что-нибудь для ввода.
В следующем примере что-то записывается во входной поток подпроцесса:
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(p.getOutputStream()));
writer.write("something");
writer.newLine();
writer.close();
Тем не менее, PyBoof - это оболочка Python для библиотеки компьютерного зрения BoofCV (противоположное направление, от Python к вызову Java), как написано на странице GitHub, и вы можете использовать библиотеку BoofCV непосредственно из Java.
OP вообще не должен использовать эту библиотеку. Но если вы выполняете что-то подобное, вам также необходимо использовать поток ошибок и выходной поток этого процесса, иначе процесс может заблокироваться.
Спасибо! Теперь у меня ошибка process = 2 (система не может найти указанный файл), и я работаю над этим. В любом случае, я просто пытаюсь понять, как использовать Java и Python одновременно, поэтому и попробовал.
@KaterinaKornilia Отлично! вы можете также использовать среду вывода, известную Java. Я предпочитаю сначала настроить системную среду, добавив папку сценариев Python и Python.
Кроме того, вы можете попробовать посмотреть проект jPype, который более плавно соединяет Java и Python.
Спасибо, @Eir Nym! Я не могу использовать jPype, я пытаюсь установить его через pip в Python 2.7.15, но подходящего дистрибутива не найдено.
@KaterinaKornilia Действительно, есть сборка Python3 в PyPI (с именем JPype1-py3). Могу я спросить, почему вам нужно использовать Python2 в 2018 году?
Потому что сначала я попробовал Jython, который несовместим с Python 3.x. Поскольку я работаю с двумя компьютерами, я попробую это сделать на другом, на котором у меня установлен Python 3.6, и расскажу вам.
Я пробовал это через Anaconda3, и у меня не получилось, либо появилось то же сообщение «Не найдено подходящего распределения для jpype»
Обновил мой ответ с улучшенной обработкой процесса
Согласно их документации «PyBoof - это оболочка Python для библиотеки компьютерного зрения BoofCV. Поскольку это библиотека Java, вам необходимо установить java и javac». Другими словами, вы пытаетесь вызвать оболочку Python вокруг библиотеки Java из Java. Почему?! Просто используйте эту библиотеку BoofCV напрямую, поскольку это библиотека Java.