先說下上面問題的原因,上面問題是因為python中用到了第三方的類庫,你的電腦上沒有那個類庫,所以程序沒有運行,在控制台也就看不到輸出。只要導入那個類庫就好。。。
python 導入類庫,可以單獨下載那個類庫安裝,也可以直接下載 Anaconda (這里面包含了python numpy pandas)不過比較大。
不過我,不是用的上面的兩種方式,我是在pycharm 中打開的python程序,pycharm提示要不要自動下載類庫(類似於ideal 中寫java 代碼的自動導包),我選擇導入。(簡單粗暴)
pycharm 的安裝:https://blog.csdn.net/asd343442/article/details/84103444
最近公司要用到java調用python。
通過百度了解到java 調用python有 Runtime() 和Jython 兩種方法。 runtime對於簡單的程序可以直接使用,也不用導包什么的。
Jython是python在java語言平台的實現。我們平時使用的python其實是Cython 是python 在C語言的實現。 python只是語言規范,執行需要C JAVA 等語言去執行。
Jython的使用,需要安裝Jython的環境和導入Jython導包。
參考文章 :https://www.cnblogs.com/nuccch/p/8435693.html
https://blog.csdn.net/it_xiao_bai/article/details/79074988
runtime java調用python參考代碼:
public class CallPy { public static void main(String[] args) throws IOException, InterruptedException { // TODO Auto-generated method stub int month = 5; Process proc; String lastLine = null; try { String[] strings = {"python", "E:\\devTool\\Pyproject\\demo\\second.py"}; String[] strings2 = {"E:\\devTool\\python\\python.exe", "D:\\add.py"}; // 執行py文件\\ proc = Runtime.getRuntime().exec(strings); //用輸入輸出流來截取結果 BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream())); String content = null;while (true){ lastLine = content; if ((content = in.readLine()) == null){ System.out.println(lastLine); break; } } in.close(); proc.waitFor(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); }
String substring = lastLine.substring(1, lastLine.length() - 1);
String[] split = substring.split(" ");
第一個坑: 上面這段代碼,黃色部分是取出python輸出的最后一行的內容。
上面靛藍色的部分,上面部分是寫的2個python運行文件的地址,下面的是指的是對輸出的字符串,切割空格得到數組。因為我的電腦上有多個python運行環境(自己安裝了一個python,安裝了jython),如果不指定python.exe的絕對路徑,在下面字符串按照空格切割解得到的數組,中間會夾雜着 空字符串,解決辦法是,把 split(“ ”)引號中輸入2個空格。
第二個坑: 電腦上如果沒有python的環境,會報無法加載python文件的錯誤。。