Вызов Python скрипта из Java кода

Иногда, чтобы выполнить требования проекта, нам необходимо вызывать Python скрипты из нашего Java кода. Это можно сделать с помощью классов Process, ProcessBuilder и Jython. Давайте рассмотрим, как мы можем использовать каждый из них.

Использование класса Process для запуска Python скрипта из Java кода

Мы можем использовать класс Process в Java для запуска Python скриптов из нашего Java кода. Давайте попробуем создать Python скрипт и запустить его с помощью Java кода.

Следуйте шагам ниже:

  • Скопируйте ваш Python скрипт в строку в Java.
  • Создайте файл с расширением .py, используя BufferedWriter.
  • Запишите содержимое из строки в файл Python и закройте записывающий поток.
  • Создайте процесс для запуска файла Python с помощью Runtime.getRuntime().exec().
  • Прочитайте данные из процесса с помощью BufferedReader.
  • Используйте или выведите данные, полученные из выполнения кода Python.

Теперь давайте реализуем указанные выше шаги в Java коде:

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.InputStreamReader; public class Example { public static void main(String a[]){ try{ String Python_Script = "print(\"Привет, это DTF.RU!\")\n"; BufferedWriter Buffered_Writer = new BufferedWriter( new FileWriter("DemoPythonFile.py")); Buffered_Writer.write(Python_Script); Buffered_Writer.close(); Process Demo_Process = Runtime.getRuntime().exec("python DemoPythonFile.py"); BufferedReader Buffered_Reader = new BufferedReader( new InputStreamReader( Demo_Process.getInputStream() )); }catch(Exception e){ e.printStackTrace(); } } }

Код выше пытается создать и запустить Python скрипт в Java и записать следующую строку в файл DemoPythonFile.py.

Привет, это DTF.RU!

Следует отметить, что нет необходимости создавать скрипт Python, а затем его запускать; вы также можете напрямую загрузить свой Python скрипт и его вывод в Java код.

Обратите внимание, что вы можете получить предупреждение о устаревшей функции Runtime.getRuntime().exec(), что означает, что Java может удалить эту функцию в будущих версиях.

Использование класса ProcessBuilder для запуска Python скрипта из Java кода

Класс ProcessBuilder в Java используется для создания процесса операционной системы. Мы также можем использовать этот класс для запуска Python скриптов в Java.

Следуйте шагам ниже, чтобы запустить Python скрипты в Java с помощью класса ProcessBuilder:

  • Убедитесь, что Python установлен на вашей системе.
  • Создайте Python скрипт с расширением .py или выберите один, если у вас уже есть.
  • Создайте экземпляр класса ProcessBuilder и передайте python и путь к скрипту в качестве параметров.
  • Создайте процесс для запуска ProcessBuilder с помощью метода start(); это выполнит Python скрипт.
  • Создайте BufferedReader для получения вывода Python скрипта из процесса.
  • Выведите результат.

Давайте реализуем пример на Java. Наш Python скрипт:

print("Привет, это DTF.RU!")

И вот реализация на Java:

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Example { public static void main(String[] args) throws IOException, InterruptedException { String Script_Path = "C:\\Users\\Mironov\\script.py"; ProcessBuilder Process_Builder = new ProcessBuilder("python",Script_Path) .inheritIO(); Process Demo_Process = Process_Builder.start(); Demo_Process.waitFor(); BufferedReader Buffered_Reader = new BufferedReader( new InputStreamReader( Demo_Process.getInputStream() )); String Output_line = ""; while ((Output_line = Buffered_Reader.readLine()) != null) { System.out.println(Output_line); } } }

Приведенный выше код выполнит указанный Python-скрипт с использованием Java и выведет его в консоль. Вывод:

Привет, это DTF.RU!

Используйте Jython для одновременного выполнения Python и Java кода

Jython - это проект для реализации скриптов Python в коде Java. Jython запускает Python и Java код одновременно.

Чтобы использовать Jython в Java, нам просто нужно скачать Jython-standalone-2.7.2.jar или любую последнюю версию и добавить его в путь сборки вашего проекта. Следуйте шагам ниже, чтобы добавить Jython в вашу Java среду:

  • Скачайте Jython Standalone здесь.
  • Добавьте Jython-standalone-2.7.2.jar в ваш путь сборки.
  • Перейдите в свойства проекта Properties -> Java Build Path.
  • Добавьте внешний Jar в ваш classpath.
  • Выберите Jython-standalone-2.7.2.jar и нажмите Применить и Закрыть.

После того как Jython включен в нашу среду Java, мы теперь можем запускать Python-скрипты в Java. Класс PythonInterpreter принадлежит Jython и используется для выполнения Python-скриптов и операций.

Вот различные методы от Jython для выполнения Python в Java:

  • setIn(PyObject) - Используется для установки объекта Python в качестве стандартного входного потока.
  • setIn(java.io.Reader) - Используется для установки Java IO Reader в качестве стандартного входного потока.
  • setIn(java.io.InputStream) - Используется для установки Java IO InputStream в качестве стандартного входного потока.
  • setOut(PyObject) - Используется для установки объекта Python в качестве стандартного выходного потока.
  • setOut(java.io.Writer) - Используется для установки Java IO Writer в качестве стандартного выходного потока.
  • setOut(java.io.OutputStream) - Используется для установки Java IO OutputStream в качестве стандартного выходного потока.
  • setErr(java.io.Writer) - Используется для установки Java IO Writer в качестве потока стандартных ошибок.
  • setErr(PyObject) - Используется для установки объекта Python в качестве потока стандартных ошибок.
  • setErr(java.io.OutputStream) - Используется для установки Java IO OutputStream в качестве потока стандартных ошибок.
  • eval(String) - Используется для вычисления строки Python для Java.
  • eval(PyObject) - Используется для вычисления объекта Python для Java.
  • exec(String) - Используется для выполнения строки Python в локальном пространстве имен.
  • exec(PyObject) - Используется для выполнения объекта Python в локальном пространстве имен.
  • execfile(String filename) - Используется для выполнения файла Python в локальном пространстве имен.
  • execfile(java.io.InputStream) - Используется для выполнения Python InputStream в локальном пространстве имен.
  • compile(String) - Используется для компиляции строки Python в модуль выражения.
  • compile(script, filename) - Используется для компиляции скрипта Python в модуль выражения.
  • set(String name, Object value) - Используется для установки переменной типа объект.
  • set(String name, PyObject value) - Используется для установки переменной типа PyObject.
  • get(String) - Используется для получения значения переменной.
  • get(String name, Classjavaclass) - Используется для получения значения переменной и возврата его в виде экземпляра заданного класса Java.

Теперь, когда мы знаем о методах из проектов Jython, давайте попробуем использовать некоторые из них в нашем примере: Файл script.py:

print("Привет, это DTF.RU!, Сообщение от Python")

Реализация Jython:

import org.python.util.PythonInterpreter; import org.python.core.*; public class Example { public static void main(String []args) throws PyException { PythonInterpreter Python_Interpreter = new PythonInterpreter(); System.out.println( "Привет, это DTF.RU!, Сообщение от Java" ); // Запустите Python файл Python_Interpreter.execfile("C:\\Users\\Mironov\\script.py"); // Выполнить различные операции Python // Установить переменную и распечатать ее с использованием Python в java Python_Interpreter.set("x", new PyInteger(100)); Python_Interpreter.exec("print x"); // Выполнить сумму Python_Interpreter.exec("y = 25+45"); PyObject y = Python_Interpreter.get("y"); System.out.println("y: "+y); } }

Приведенный выше код выполнит Python-скрипт из файла и выполнит некоторые Python-операции с использованием методов из таблицы выше. Вывод:

Привет, это DTF.RU!, Сообщение от Java Привет, это DTF.RU!, Сообщение от Python 100 y: 70
33
3 комментария

Комментарий недоступен

2
Ответить

погромист решил устроить погром на сайте

3
Ответить