🐍 Как Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Python ΠΈΠ· Java: ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Для запуска Python ΠΈΠ· Java Π²Π°ΠΌ понадобится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс ProcessBuilder. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        try {
            List command = new ArrayList<>();
            command.add("python");
            command.add("имя_Ρ„Π°ΠΉΠ»Π°.py");
            
            ProcessBuilder pb = new ProcessBuilder(command);
            Process process = pb.start();
            
            int exitCode = process.waitFor();
            
            System.out.println("Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄: " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся список ΠΊΠΎΠΌΠ°Π½Π΄, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ исполняСмому Ρ„Π°ΠΉΠ»Ρƒ Python ΠΈ имя Ρ„Π°ΠΉΠ»Π° Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. Π—Π°Ρ‚Π΅ΠΌ создаСтся экзСмпляр ProcessBuilder с этим списком ΠΊΠΎΠΌΠ°Π½Π΄, ΠΈ процСсс запускаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° start(). Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ процСсса ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ waitFor(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄ процСсса.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Как Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Python ΠΈΠ· Java

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Python-скрипты ΠΈΠ· Java-прилоТСния. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ вас установлСны Java Development Kit (JDK) ΠΈ Python Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅.

1. ИспользованиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Runtime.exec()

Один ΠΈΠ· способов Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Python-скрипт ΠΈΠ· Java - это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Runtime.exec(). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС вашСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы.

Π’ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ запуск Python-скрипта ΠΈΠ· Java:


   import java.io.BufferedReader;
   import java.io.IOException;
   import java.io.InputStreamReader;

   public class PythonRunner {
       public static void main(String[] args) {
           try {
               String pythonScriptPath = "path/to/your/python/script.py";
               String[] cmd = {"python", pythonScriptPath};
               Process process = Runtime.getRuntime().exec(cmd);
               
               BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
               String line;
               while ((line = reader.readLine()) != null) {
                   System.out.println(line);
               }
               
               // Π–Π΄Π΅ΠΌ, ΠΏΠΎΠΊΠ° скрипт Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ
               int exitCode = process.waitFor();
               System.out.println("Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄: " + exitCode);
           } catch (IOException | InterruptedException e) {
               e.printStackTrace();
           }
       }
   }
   

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр класса Process, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ exec() класса Runtime. Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ pythonScriptPath Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ Python-скрипту. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ создаСм массив cmd, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ выполнСния Python ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊ скрипту.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ создаСм экзСмпляр класса BufferedReader для чтСния Π²Ρ‹Π²ΠΎΠ΄Π° Python-скрипта. Π’ Ρ†ΠΈΠΊΠ»Π΅ ΠΌΡ‹ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π΅Π΅ Π² консоль Java-прилоТСния.

ПослС выполнСния скрипта ΠΌΡ‹ ΠΆΠ΄Π΅ΠΌ, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄.

2. ИспользованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Jython

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Python-скрипт ΠΈΠ· Java - это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Jython. Jython - это рСализация языка Python, написанная Π½Π° Java, которая позволяСт Π²Π°ΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Python-ΠΊΠΎΠ΄ с Java-прилоТСниями.

Для использования Jython Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ зависимости Π² ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. НапримСр, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ систСму управлСния зависимостями Maven, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» pom.xml:


   <dependency>
       <groupId>org.python</groupId>
       <artifactId>jython-standalone</artifactId>
       <version>2.7.2</version>
   </dependency>
   

ПослС добавлСния зависимости Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Python-скрипт:


   import org.python.util.PythonInterpreter;

   public class PythonRunner {
       public static void main(String[] args) {
           try (PythonInterpreter pyInterp = new PythonInterpreter()) {
               pyInterp.exec("print('ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!')");
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
   }
   

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ класс PythonInterpreter ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Jython. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ создаСм Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр PythonInterpreter ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ exec() для выполнСния Python-ΠΊΠΎΠ΄Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ просто Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ„Ρ€Π°Π·Ρƒ "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!" Π² консоль Java-прилоТСния.

3. ИспользованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ProcessBuilder

Π’Ρ€Π΅Ρ‚ΠΈΠΉ способ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Python-скрипт ΠΈΠ· Java - это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ProcessBuilder. ProcessBuilder прСдоставляСт Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ способ управлСния внСшними процСссами ΠΈΠ· Java-прилоТСния.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ использованиС ProcessBuilder для запуска Python-скрипта:


   import java.io.BufferedReader;
   import java.io.IOException;
   import java.io.InputStreamReader;

   public class PythonRunner {
       public static void main(String[] args) {
           try {
               String pythonScriptPath = "path/to/your/python/script.py";
               ProcessBuilder processBuilder = new ProcessBuilder("python", pythonScriptPath);
               Process process = processBuilder.start();
               
               BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
               String line;
               while ((line = reader.readLine()) != null) {
                   System.out.println(line);
               }
               
               // Π–Π΄Π΅ΠΌ, ΠΏΠΎΠΊΠ° скрипт Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ
               int exitCode = process.waitFor();
               System.out.println("Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄: " + exitCode);
           } catch (IOException | InterruptedException e) {
               e.printStackTrace();
           }
       }
   }
   

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр ProcessBuilder ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ выполнСния Python, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡƒΡ‚ΡŒ ΠΊ Python-скрипту Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ start(). Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ выполняСм Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ дСйствия, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…: Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄ Python-скрипта, ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрСли Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… способа запуска Python-скриптов ΠΈΠ· Java-прилоТСния. ΠœΠ΅Ρ‚ΠΎΠ΄ Runtime.exec() позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Jython позволяСт ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Python-ΠΊΠΎΠ΄ нСпосрСдствСнно Π² Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° ProcessBuilder прСдоставляСт Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ способ управлСния внСшними процСссами.

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ подходящий способ Π² зависимости ΠΎΡ‚ Π²Π°ΡˆΠΈΡ… потрСбностСй ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ Python-скрипту.

Π£Π΄Π°Ρ‡ΠΈ Π² вашСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ!

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Java - ΡƒΡ€ΠΎΠΊ 55.2 (запуск процСссов ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Java (Process). ВСст python)

Java - ΡƒΡ€ΠΎΠΊ 55.3 (ProcessBuilder, waitFor(). Запуск python Π² Java ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· процСсса)

Python - Установка Java SDK ΠΈ PyCharm

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

πŸ”Ž Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ послСднюю Ρ†ΠΈΡ„Ρ€Ρƒ Π² числС Python? 🐍

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π² Python? 🐍 Π£Π·Π½Π°ΠΉΡ‚Π΅ особСнности ΠΈ использованиС ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ

Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ символ большим Π² Python: простая инструкция 🐍

🐍 Как Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Python ΠΈΠ· Java: ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ remove Π² Python? 🐍 Π£Π·Π½Π°ΠΉΡ‚Π΅ основы Ρ€Π°Π±ΠΎΡ‚Ρ‹ с remove Π² Python с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΈ объяснСниями! πŸ“š

⚑️Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ список случайных чисСл Π² Python: простой гайд⚑️

🐍 Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ дистрибутив ΠΏΠΈΡ‚ΠΎΠ½Π°? Π£Π·Π½Π°ΠΉΡ‚Π΅ всС сСйчас! 🐍