在java類中直接執(zhí)行python語句
在java類中直接調(diào)用本地python腳本
使用Runtime.getRuntime()執(zhí)行python腳本文件(推薦)
調(diào)用python腳本中的函數(shù)
簡(jiǎn)單介紹
官網(wǎng)地址?首頁(yè) | (jython.org)
Jython項(xiàng)目提供了Java中的Python實(shí)現(xiàn), 為Python提供了在JVM上運(yùn)行的好處,并可以訪問用Java編寫的類。 當(dāng)前版本(Jython 2.7.x)僅支持Python 2(抱歉)。 在項(xiàng)目的GitHub存儲(chǔ)庫(kù)中有一個(gè)關(guān)于Python 3的工作。
Jython實(shí)現(xiàn)可免費(fèi)用于商業(yè)和非商業(yè)用途。 它們與?PSF 許可證 v2?下的源代碼一起分發(fā)。
Jython是Java的補(bǔ)充,特別適合以下任務(wù):
- 嵌入式腳本 - Java 程序員可以將 Jython 庫(kù)添加到他們的系統(tǒng)中,以允許最終用戶編寫簡(jiǎn)單或復(fù)雜的腳本,為應(yīng)用程序添加功能。
- 交互式實(shí)驗(yàn) - Jython 提供了一個(gè)交互式解釋器,可用于與 Java 包或正在運(yùn)行的 Java 應(yīng)用程序進(jìn)行交互。這允許程序員使用Jython試驗(yàn)和調(diào)試任何Java系統(tǒng)。
- 快速應(yīng)用程序開發(fā) - Python 程序通常比同等的 Java 程序短 2-10 倍。這直接轉(zhuǎn)化為程序員生產(chǎn)力的提高。Python和Java之間的無縫交互允許開發(fā)人員在開發(fā)和發(fā)布產(chǎn)品期間自由混合這兩種語言。
下面是在一個(gè)簡(jiǎn)單的 Java 應(yīng)用程序中運(yùn)行 Python 代碼的示例
import org.python.util.PythonInterpreter;
public class JythonHelloWorld {
public static void main(String[] args) {
try(PythonInterpreter pyInterp = new PythonInterpreter()) {
pyInterp.exec("print('Hello Python World!')");
}
}
}
下面是從 Python 代碼使用 Java 的示例
from java.lang import System # Java import
print('Running on Java version: ' + System.getProperty('java.version'))
print('Unix time from Java: ' + str(System.currentTimeMillis()))
準(zhǔn)備工作:
創(chuàng)建maven工程,結(jié)構(gòu)如下:關(guān)注箭頭的幾個(gè)類即可
到官網(wǎng)Downloads | Jython下載Jython的jar包或者在maven的pom.xml文件中加入如下代碼:
<dependency>
<groupId>org.python</groupId>
<artifactId>jython-standalone</artifactId>
<version>2.7.0</version>
</dependency>
???????
1.在java類中直接執(zhí)行python語句
?創(chuàng)建JavaRunPython.java類:
package com.test;
import org.python.util.PythonInterpreter;
public class JavaRunPython {
public static void main(String[] args) {
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("a='hello world'; ");
interpreter.exec("print a;");
}
}
輸出結(jié)果如下:
2.在java中直接調(diào)用python腳本
在本地的D盤創(chuàng)建一個(gè)python腳本,文件名字為javaPythonFile.py,文件內(nèi)容如下:
a = 1
b = 2
print (a + b)
創(chuàng)建JavaPythonFile.java類,內(nèi)容如下:
package com.test;
import org.python.util.PythonInterpreter;
public class JavaPythonFile {
public static void main(String[] args) {
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("D:\\javaPythonFile.py");
}
}
輸出結(jié)果如下:
3.使用Runtime.getRuntime()執(zhí)行python腳本文件,推薦使用
在本地的D盤創(chuàng)建一個(gè)python腳本,文件名字為Runtime.py,文件內(nèi)容如下:
print('RuntimeDemo')
創(chuàng)建RuntimeFunction.java類,內(nèi)容如下:
package com.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class RuntimeFunction {
public static void main(String[] args) {
Process proc;
try {
proc = Runtime.getRuntime().exec("python D:\\Runtime.py");
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
proc.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
4.調(diào)用python腳本中的函數(shù)
在本地的D盤創(chuàng)建一個(gè)python腳本,文件名字為add.py,文件內(nèi)容如下:
def add(a,b):
return a + b
創(chuàng)建Function.java類,內(nèi)容如下:
package com.test;
import org.python.core.PyFunction;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter;
public class Function {
public static void main(String[] args) {
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("D:\\add.py");
// 第一個(gè)參數(shù)為期望獲得的函數(shù)(變量)的名字,第二個(gè)參數(shù)為期望返回的對(duì)象類型
PyFunction pyFunction = interpreter.get("add", PyFunction.class);
int a = 5, b = 10;
//調(diào)用函數(shù),如果函數(shù)需要參數(shù),在Java中必須先將參數(shù)轉(zhuǎn)化為對(duì)應(yīng)的“Python類型”
PyObject pyobj = pyFunction.__call__(new PyInteger(a), new PyInteger(b));
System.out.println("the anwser is: " + pyobj);
}
}
運(yùn)行結(jié)果如下:文章來源:http://www.zghlxwxcb.cn/news/detail-624676.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-624676.html
到了這里,關(guān)于DevOps系列文章之 java調(diào)用python腳本的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!