Hướng dẫn how do i run a python program in java? - làm cách nào để chạy chương trình python trong java?

Bạn có thể sử dụng java & nbsp; runtime.exec () & nbsp; để chạy tập lệnh python, như một ví dụ trước tiên tạo tệp script python bằng cách sử dụng & nbsp; shebang & nbsp; và sau đó đặt nó thực thi.

#!/usr/bin/python
import sys
print ('Number of Arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
print('This is Python Code')
print('Executing Python')
print('From Java')

Nếu bạn lưu tệp trên dưới dạng script_python và sau đó đặt các quyền thực thi bằng cách sử dụng

chmod 777 script_python

Sau đó, bạn có thể gọi tập lệnh này từ java & nbsp; runtime.exec () & nbsp; như bên dưới

import java.io.*;
import java.nio.charset.StandardCharsets;

public class ScriptPython {
       Process mProcess;

public void runScript(){
       Process process;
       try{
             process = Runtime.getRuntime().exec(new String[]{"script_python","arg1","arg2"});
             mProcess = process;
       }catch(Exception e) {
          System.out.println("Exception Raised" + e.toString());
       }
       InputStream stdout = mProcess.getInputStream();
       BufferedReader reader = new BufferedReader(new InputStreamReader(stdout,StandardCharsets.UTF_8));
       String line;
       try{
          while((line = reader.readLine()) != null){
               System.out.println("stdout: "+ line);
          }
       }catch(IOException e){
             System.out.println("Exception in reading output"+ e.toString());
       }
}
}

class Solution {
      public static void main(String[] args){
          ScriptPython scriptPython = new ScriptPython();
          scriptPython.runScript();
      }

}

Hy vọng điều này sẽ giúp và nếu không thì khuyến nghị tham gia lớp đào tạo Java của chúng tôi và tìm hiểu về Java một cách chi tiết.

Cách tiếp cận Jython

Java được cho là độc lập nền tảng và gọi một ứng dụng gốc (như Python) không độc lập với nền tảng.

Có một phiên bản của Python (Jython) được viết bằng Java, cho phép chúng tôi nhúng Python vào các chương trình Java của chúng tôi. Như thường lệ, khi bạn sẽ sử dụng các thư viện bên ngoài, một trở ngại là biên dịch và chạy nó một cách chính xác, do đó chúng tôi trải qua quá trình xây dựng và điều hành một chương trình Java đơn giản với Jython.

Chúng tôi bắt đầu bằng cách giữ tệp Jython Jar:

https://www.jython.org/download.html

Tôi đã sao chép Jython-2.5.3.Jar vào thư mục nơi chương trình Java của tôi sẽ đến. Sau đó, tôi đã nhập vào chương trình sau, làm giống như hai chương trình trước đó; Lấy hai số, gửi chúng đến Python, thêm chúng, sau đó Python đưa nó trở lại chương trình Java của chúng tôi, trong đó số được xuất ra vào màn hình:

import org.python.util.PythonInterpreter; 
import org.python.core.*; 

class test3{
    public static void main(String a[]){

        PythonInterpreter python = new PythonInterpreter();

        int number1 = 10;
        int number2 = 32;
        python.set("number1", new PyInteger(number1));
        python.set("number2", new PyInteger(number2));
        python.exec("number3 = number1+number2");
        PyObject number3 = python.get("number3");
        System.out.println("val : "+number3.toString());
    }
}

Tôi gọi tệp này là "test3.java", lưu nó và thực hiện các mục sau để biên dịch nó:

javac -classpath jython-2.5.3.jar test3.java

Bước tiếp theo là cố gắng chạy nó, mà tôi làm theo cách sau:

java -classpath jython-2.5.3.jar:. test3

Bây giờ, điều này cho phép chúng tôi sử dụng Python từ Java, theo cách độc lập của nền tảng. Nó là loại chậm. Tuy nhiên, nó thật tuyệt, đó là một thông dịch viên Python được viết bằng Java.

Javabridge tải một lớp Java, org.cellprofiler.javabridge.cpython, có thể được sử dụng để thực thi mã python. Lớp có thể được sử dụng trong mã Java được gọi từ trình thông dịch Python hoặc nó có thể được sử dụng trong Java để chạy Python được nhúng trong Java.

Lớp ________ 8 ________ 9 ()()

Lớp CPython liên kết trình thông dịch Python với JVM và cung cấp khả năng thực thi các tập lệnh Python.

________ 10 ()()
Arguments:
  • Tập lệnh - tập lệnh Python để thực thi. – The Python script to execute.
  • Người dân địa phương - Bản đồ tên của một đối tượng Java trong bối cảnh thực thi Python cho chính đối tượng Java. Các đối tượng trong bản đồ có phạm vi cục bộ. Một giá trị null có thể được sử dụng nếu không có người dân địa phương cần được xác định. – A map of the name of a Java object in the Python execution context to the Java object itself. The objects in the map have local scope. A null value can be used if no locals need to be defined.
  • GLOBALS - Bản đồ tên của một đối tượng Java cho chính đối tượng Java. Các đối tượng trong bản đồ có phạm vi toàn cầu. Nếu một giá trị null được sử dụng,
    chmod 777 script_python
    1 mặc định cho toàn cầu tích hợp.
    – A map of the name of a Java object to the Java object itself. The objects in the map have global scope. If a null value is used,
    chmod 777 script_python
    1 defaults to the builtin globals.

chmod 777 script_python
2 thực thi tập lệnh được truyền trong trình thông dịch Python. Thông dịch viên thêm các toàn cầu tích hợp vào toàn cầu được truyền vào, sau đó thực thi tập lệnh. Bản đồ tương tự có thể được sử dụng cho cả người dân địa phương và toàn cầu - chế độ này có vẻ quen thuộc hơn với những người thường xuyên tập lệnh trong Python và hy vọng tuyên bố
chmod 777 script_python
3 sẽ có hiệu ứng toàn cầu.

Không có phương pháp

chmod 777 script_python
4. Bạn có thể truy xuất các giá trị bằng cách chuyển một đối tượng container như một mảng hoặc bản đồ là một trong những người dân địa phương và bạn có thể đặt các phần tử trong đối tượng với các giá trị được trả về.

Example:

class MyClass {
    static final CPython cpython = CPython();

    public List whereIsWaldo(String root) {
         ArrayList result = new ArrayList();
         Hashtable locals = new Hashtable();
         locals.put("result", result);
         locals.put("root", root);
         StringBuilder script = new StringBuilder();
         script.append("import os\n");
         script.append("import javabridge\n");
         script.append("root = javabridge.to_string(root)");
         script.append("result = javabridge.JWrapper(result)");
         script.append("for path, dirnames, filenames in os.walk(root):\n");
         script.append("  if 'waldo' in filenames:");
         script.append("     result.add(path)");
         cpython.exec(script.toString(), locals, null);
         return result;
    }

}

________ 15 ()()

chmod 777 script_python
6 là một từ đồng nghĩa với
chmod 777 script_python
7 là từ khóa Python.Sử dụng
chmod 777 script_python
6 thay cho
chmod 777 script_python
7 để gọi Python từ một cwrapper javabridge cho cpython.

Các tài liệu tham khảo duy trì các giá trị Python

Bạn có thể muốn duy trì các tham chiếu đến các đối tượng Python trên các tập lệnh.Các chức năng sau cho phép người gọi Java đề cập đến giá trị python (có thể là loại cơ sở hoặc một đối tượng) thông qua mã thông báo có thể được trao đổi cho giá trị bất cứ lúc nào.Mã Java chịu trách nhiệm quản lý thời gian tham chiếu.Thí dụ:

import javabridge

cpython = javabridge.JClassWrapper('org.cellprofiler.javabridge.CPython')()
d = javabridge.JClassWrapper('java.util.Hashtable')()
result = javabridge.JClassWrapper('java.util.ArrayList')()
d.put("result", result)
cpython.execute(
    'import javabridge\n'
    'x = { "foo":"bar"}\n'
    'ref_id = javabridge.create_and_lock_jref(x)\n'
    'javabridge.JWrapper(result).add(ref_id)', d, d)
cpython.execute(
    'import javabridge\n'
    'ref_id = javabridge.to_string(javabridge.JWrapper(result).get(0))\n'
    'assert javabridge.redeem_jref(ref_id)["foo"] == "bar"\n'
    'javabridge.unlock_jref(ref_id)', d, d)