Java вызывает метод Python
Java вызывает метод Python

Java вызывает метод Python

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

Обзор шагов

Чтобы вызвать метод Python в Java,мы можем использоватьJavaизProcessBuilderкласс для выполненияPythonустный переводчик,И взаимодействовать с процессом Python через потоки ввода и вывода. Вот как реализовать этот процесс:

  1. Установите Python: сначала убедитесь, что Python установлен на вашем компьютере.
  2. Подготовьте сценарий Python. Напишите сценарий Python, содержащий метод, который вы хотите вызвать. Убедитесь, что сценарий сохранен локально, и запишите путь к нему.
  3. Написать Java-код: В Java-проектах,использоватьProcessBuilderкласс для выполненияPythonустный переводчик,И взаимодействовать с процессом Python через потоки ввода и вывода.
  4. Выходные данные процесса: прочитайте выходные данные процесса Python и обработайте их по мере необходимости.

Написать Java-код

Ниже приведен пример кода Java для вызова метода в сценарии Python:

Язык кода:javascript
копировать
javaCopy code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class PythonCaller {
    public static void main(String[] args) {
        try {
            // Установите пути к интерпретатору Python и сценариям Python
            String pythonInterpreter = "python"; // Измените путь интерпретатора в соответствии с реальной ситуацией.
            String pythonScript = "/path/to/your/python/script.py"; // Измените путь сценария в соответствии с реальной ситуацией.
            // Создание объекта ProcessBuilder
            ProcessBuilder processBuilder = new ProcessBuilder(pythonInterpreter, pythonScript);
            Process process = processBuilder.start();
            // Получить выходные данные процесса Python
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                // Результаты вывода процесса
                System.out.println(line);
            }
            // Подождите, пока процесс Python завершит выполнение и получите значение выхода.
            int exitCode = process.waitFor();
            System.out.println("Python process exited with code " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

В приведенном выше коде,Сначала мы устанавливаем путь к интерпретатору Python и путь к скрипту Python. Затем,использоватьProcessBuilderКласс строит процесс для выполненияPythonустный переводчик,并将Скрипт路径作为参数传递给устный переводчик。 существовать Получить выходные данные процесса Питон,我们использоватьBufferedReaderдобрый读取进程из输入流,и построчно Результаты вывода процесса。你可以根据Скриптиз具体输出格式进行相应из处理。 наконец,我们использоватьwaitForметод ждетPythonВыполнение процесса завершено,и получить его выходное значение.

Запуск и отладка

Прежде чем запускать код Java, убедитесь, что у вас установлен Python и готов к вызову скрипт Python. При запуске кода Java вы можете использовать среду разработки Java (например, Eclipse, IntelliJ и т. д.) для запуска программы или скомпилировать и запустить ее через командную строку. Убедитесь, что пути кода Java и сценария Python верны, и измените соответствующую информацию о пути в соответствии с реальной ситуацией. 如果существовать调用Python方法час遇到问题,可以использоватьSystem.out.println()существоватьJavaОтладочный вывод в коде,Или просмотрите поток вывода ошибок процесса Python.

Приложения Java должны использовать библиотеку обработки изображений Python PIL для обработки изображений. Сначала убедитесь, что вы установили и настроили библиотеки Python и PIL. Ниже приведен пример кода для вызова библиотеки Python PIL для обработки изображений в Java:

Язык кода:javascript
копировать
javaCopy code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ImageProcessingApp {
    public static void main(String[] args) {
        try {
            // Установите пути к интерпретатору Python и сценариям Python
            String pythonInterpreter = "python"; // Измените путь интерпретатора в соответствии с реальной ситуацией.
            String pythonScript = "/path/to/your/python/script.py"; // Измените путь сценария в соответствии с реальной ситуацией.
            
            // Создание объекта ProcessBuilder
            ProcessBuilder processBuilder = new ProcessBuilder(pythonInterpreter, pythonScript);
            Process process = processBuilder.start();
            
            // Получите входные и выходные потоки процесса Python
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
            
            // Отправьте процессу Python путь к файлу изображения для обработки.
            String imagePath = "/path/to/your/image.jpg"; // Измените путь к файлу изображения в соответствии с реальной ситуацией.
            writer.write(imagePath + "\n");
            writer.flush();
            
            // Прочитайте выходные данные процесса Python
            String line;
            while ((line = reader.readLine()) != null) {
                // Результаты вывода процесса
                System.out.println(line);
            }
            
            // Подождите, пока процесс Python завершит выполнение и получите значение выхода.
            int exitCode = process.waitFor();
            System.out.println("Python process exited with code " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

В приведенном выше коде,Предположим, существуетPythonСкриптscript.py,который содержит метод обработки изображений,Этот метод получает на вход путь к файлу изображения.,и вернуть результат после обработки изображения。использоватьProcessBuilderКласс создает процесс для выполненияPythonустный переводчик,并将Скрипт路径传递给устный переводчик。 В коде Java мы получаем входные и выходные потоки процесса Python, отправляем путь к файлу изображения для обработки в процесс Python и читаем выходные результаты процесса Python.

ProcessBuilderдаJava提供из一个用于创建和控制外部进程издобрый。它提供了一种简单из方式来执行外部命令,И взаимодействовать с внешними процессами через потоки ввода и вывода. ProcessBuilder接口даjava.lang.ProcessBuilderдобрыйиз接口,его можно использовать для созданияProcessBuilderобъект。ProcessBuilderКласс предоставляет ряд методов для настройки и запуска внешних процессов.,并提供了对进程из输入/выходной поток、错误流из访问。 下面да一些ProcessBuilder接口из常用方法:

  1. command(String... command):设置要执行из外部命令。Передать массив строк,Каждый элемент представляет параметр команды.,Например{"cmd.exe", "/c", "echo", "Hello, World!"}
  2. directory(File directory):设置外部进程из工作目录。Это можно сделать, передавFileобъект来指定工作目录。
  3. environment():ВернутьMap<String, String>объект,Представляет переменные среды для внешних процессов.
  4. redirectInput(File file):将输入重定向到指定из文件。
  5. redirectOutput(File file):将输出结果重定向到指定из文件。
  6. redirectError(File file):将错误流重定向到指定из文件。
  7. start():启动外部进程并ВернутьProcessобъект,Через этот объект вы можете получить поток ввода/вывода процесса.
  8. inheritIO():将子进程из输入/выходной поток继承到当前JavaВ процессе,Обеспечивает взаимодействие между дочерними процессами и процессами Java. использоватьProcessBuilder可以существоватьJavaЗапуск внешнего процесса в коде,并通过输入выходной поток进行与该进程из通信。可以ПозвонивProcessBuilderиз不同方法来设置进程из参数,文件路径以及与进程из输入输出交互方式。Позвонивstart()После того, как метод запускает процесс,可以调用返回изProcessобъектиз方法来读取进程из输出结果、Получить выходное значение процесса и т. д.

Подвести итог

通过использоватьJavaизProcessBuilderдобрый,Мы можем легко вызывать методы Python в Java. Этот подход может помочь нам использовать возможности Python в проектах Java.,Повысить общую эффективность разработки.

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.