導航:首頁 > 編程語言 > javarunpython

javarunpython

發布時間:2023-08-22 09:05:25

java調用python程序問題

Strings;
Processprocess=Runtime.getRuntime().exec("/usr/bin/pythonmy.py");
BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(process.getInputStream());
while((s=bufferedReader.readLine())!=null){
System.out.println(s);
}
process.waitfor();

❷ java調用python時傳遞的參數問題

需要用到需要用到jython.jar
java example:

public static void main(String[] args) {
//定義參數
String[] args2 = {"arg1","arg2"};
//設置參數
PythonInterpreter.initialize(null, null, args2);
PythonInterpreter interpreter = new PythonInterpreter();
//執行
interpreter.execfile("E:\\jython.py");
System.out.println("----------run over!----------");
}
python的程序:
#!/bin/env python
import time
import sys
argCount = len(sys.argv)
print('before sleep')
time.sleep(5);
print('after sleep')
for str in sys.argv:
print(str)

❸ 怎麼在java的flink中調用python程序

1. 在java類中直接執行python語句
此方法需要引用 org.python包,需要下載Jpython。在這里先介紹一下Jpython。下面引入網路的解釋:

Jython是一種完整的語言,而不是一個Java翻譯器或僅僅是一個Python編譯器,它是一個Python語言在Java中的完全實現。Jython也有很多從CPython中繼承的模塊庫。最有趣的事情是Jython不像CPython或其他任何高級語言,它提供了對其實現語言的一切存取。所以Jython不僅給你提供了Python的庫,同時也提供了所有的Java類。這使其有一個巨大的資源庫。
這里我建議下載最新版本的Jpython,因為可以使用的python函數庫會比老版本的多些,目前最新版本為2.7。
下載jar包請點擊Download Jython 2.7.0 - Standalone Jar
下載安裝程序請點擊Download Jython 2.7.0 - Installer
如果使用maven依賴添加的話,使用下面的語句
<dependency>
<groupId>org.python</groupId>
<artifactId>jython-standalone</artifactId>
<version>2.7.0</version>
</dependency>
以上准備好了,就可以直接在java類中寫python語句了,具體代碼如下:
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("a=[5,2,3,9,4,0]; ");
interpreter.exec("print(sorted(a));"); //此處python語句是3.x版本的語法
interpreter.exec("print sorted(a);"); //此處是python語句是2.x版本的語法
輸出結果如下:這里會看到輸出的結果都是一樣的,也就是說Jpython兼容python2.x和3.x版本的語句,運行速度會比直接運行python程序稍慢一點。
但是每次運行結果都會提示console: Failed to install 」: java.nio.charset.UnsupportedCharsetException: cp0. 這樣看起來很煩,因為每次運行結果都會出現紅色的提示語句,以為是錯誤,程序員應該都不願意看到這一幕,得想個辦法解決。
解決方法如下:
在要執行的代碼上右鍵, Run As>Run Configurations,選擇第二個頁簽Arguments,在VM arguments中添加以下語句
-Dpython.console.encoding=UTF-8
然後Apply->Run就可以了。

❹ 怎麼使用java運行python腳本

如果是jython,也就是運行在Jvm上的python的話,可以使用JSR223,JDK1.6已經包含了該擴展包。JSR223是一個用於解析多種腳本語言的庫包,其中包括Jython。除了JSR223包之外,還需要jython-engine.jar包。
ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");
try
{
engine.eval(new FileReader("./script/listing.py"));
}
catch(ScriptException se)
{
}
catch(IOException ie)
{
}
或者參考:http://www.360doc.com/content/10/0608/23/1404822_32043230.shtml
很久之前用過ScriptEngine,對在Jvm上的腳本語言比如jruby,jython,groovy等支持性都很好,有點忘記了。

❺ java調用python,有第三方包gensim,怎麼調用呢,是報錯。求教....

Jython(原JPython),是一個用Java語言寫的Python解釋器。

在沒有第三方模塊的情況下,通常選擇利用Jython來調用Python代碼,

它是一個開源的JAR包,你可以到官網下載

一個HelloPython程序

importorg.python.util.PythonInterpreter;

publicclassHelloPython{

publicstaticvoidmain(String[]args){

PythonInterpreterinterpreter=newPythonInterpreter();

interpreter.exec("print('hello')");

}

}

什麼是PythonInterpreter?它的中文意思即是「Python解釋器」。我們知道Python程序都是通過解釋器來執行的,我們在Java中創建一個「解釋器」對象,模擬Python解釋器的行為,通過exec("Python語句")直接在JVM中執行Python代碼,上面代碼的輸出結果為:hello

在Jvm中執行Python腳本

interpreter.execfile("D:/labs/mytest/hello.py");

如上,將exec改為execfile就可以了。需要注意的是,這個.py文件不能含有第三方模塊,因為這個「Python腳本」最終還是在JVM環境下執行的,如果有第三方模塊將會報錯:javaImportError:Nomolenamedxxx

僅在Java中調用Python編寫的函數

先完成一個hello.py代碼:

defhello():

return'Hello'

在Java代碼中調用這個函數:

importorg.python.core.PyFunction;

importorg.python.core.PyObject;

importorg.python.util.PythonInterpreter;

publicclassHelloPython{

publicstaticvoidmain(String[]args){

PythonInterpreterinterpreter=newPythonInterpreter();

interpreter.execfile("D:/labs/hello.py");

PyFunctionpyFunction=interpreter.get("hello",PyFunction.class);//第一個參數為期望獲得的函數(變數)的名字,第二個參數為期望返回的對象類型

PyObjectpyObject=pyFunction.__call__();//調用函數

System.out.println(pyObject);

}

}

上面的代碼執行結果為:Hello

即便只是調用一個函數,也必須先載入這個.py文件,之後再通過Jython包中所定義的類獲取、調用這個函數。

如果函數需要參數,在Java中必須先將參數轉化為對應的「Python類型」,例如:

__call__(newPyInteger(a),newPyInteger(b))

a,b的類型為Java中的int型,還有諸如:PyString(Stringstring)、PyList(Iterator<PyObject>iter)等。

詳細可以參考官方的api文檔。

包含第三方模塊的情況:一個手寫識別程序

這是我和舍友合作寫的一個小程序,完整代碼在這里:

,界面上引用了corejava上的一段代碼。Python代碼是舍友寫的,因為在Python程序中使用了第三方的NumPy模塊,導致無法通過Jython執行。下面這個方法純粹是個人思路,沒有深入查資料。核心代碼如下:

importjava.io.*;

classPyCaller{

privatestaticfinalStringDATA_SWAP="temp.txt";

privatestaticfinalStringPY_URL=System.getProperty("user.dir")+"\test.py";

(Stringpath){

PrintWriterpw=null;

try{

pw=newPrintWriter(newFileWriter(newFile(DATA_SWAP)));

}catch(IOExceptione){

e.printStackTrace();

}

pw.print(path);

pw.close();

}

publicstaticStringreadAnswer(){

BufferedReaderbr;

Stringanswer=null;

try{

br=newBufferedReader(newFileReader(newFile(DATA_SWAP)));

answer=br.readLine();

}catch(FileNotFoundExceptione){

e.printStackTrace();

}catch(IOExceptione){

e.printStackTrace();

}

returnanswer;

}

publicstaticvoidexecPy(){

Processproc=null;

try{

proc=Runtime.getRuntime().exec("python"+PY_URL);

proc.waitFor();

}catch(IOExceptione){

e.printStackTrace();

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

//測試碼

publicstaticvoidmain(String[]args)throwsIOException,InterruptedException{

writeImagePath("D:\labs\mytest\test.jpg");

execPy();

System.out.println(readAnswer());

}

}

實際上就是通過Java執行一個命令行指令。

❻ java執行python腳本獲取返回值問題

java執行這個腳本並獲取返回值是等待腳本執行完畢再獲取返回的。
我不清楚你是通過什麼方式來執行的。
不過你可以啟動兩個線程,一個線程開始執行腳本,一個線程去獲取輸出。

閱讀全文

與javarunpython相關的資料

熱點內容
女程序員寫的小說 瀏覽:774
華為路由器ip設置命令 瀏覽:552
如何打開軟體伺服器 瀏覽:756
單片機介面技術及應用 瀏覽:751
linux下執行腳本文件 瀏覽:127
撥號加密保護 瀏覽:435
b站彈幕加密 瀏覽:601
交友盲盒源碼破解 瀏覽:248
單片機100位百位符號 瀏覽:686
用友通加密狗壞了 瀏覽:550
如何在伺服器上配置外網網址 瀏覽:844
阿里雲伺服器的硬體在哪裡 瀏覽:54
python自動注冊谷歌 瀏覽:330
phpini驗證碼 瀏覽:826
解壓後的文件怎麼驅動 瀏覽:328
老闆要程序員加班 瀏覽:416
泰爾pdf 瀏覽:313
視頻轉碼壓縮哪款軟體好 瀏覽:649
盯盯拍記錄儀下載什麼app 瀏覽:438
新東方新概念英語pdf 瀏覽:698