Вызов 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 коде:
Код выше пытается создать и запустить Python скрипт в Java и записать следующую строку в файл DemoPythonFile.py.
Следует отметить, что нет необходимости создавать скрипт 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 скрипт:
И вот реализация на Java:
Приведенный выше код выполнит указанный Python-скрипт с использованием Java и выведет его в консоль. Вывод:
Используйте 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:
Реализация Jython:
Приведенный выше код выполнит Python-скрипт из файла и выполнит некоторые Python-операции с использованием методов из таблицы выше. Вывод: