標籤:runtime catch strong 導致 第三方庫 方便 input use private
Java調用Python的的兩種方式
1.Runtime
private static String call_python(String input_argv) { String python_py = "C:/Users/lichaoxing/Desktop/python_test.py"; String result = null; try { String[] args1 = new String[] { "python", python_py, input_argv}; Process proc=Runtime.getRuntime().exec(args1); InputStreamReader stdin=new InputStreamReader(proc.getInputStream()); LineNumberReader input=new LineNumberReader(stdin); result = input.readLine(); } catch (IOException e) { e.printStackTrace(); } return result; }
2.jython
public class jython{ public static void main(String[] args)throws Exception { try { PythonInterpreter interpreter = new PythonInterpreter(); interpreter.execfile("C:\\Users\\lichaoxing\\Desktop\\hello.py"); PyFunction pyFunction = interpreter.get("hello", PyFunction.class); PyObject pyObject = pyFunction.__call__(); System.out.println(pyObject); }catch(Exception e) { e.printStackTrace(); } }}
遇到的問題:
- 採用jython的方式時,如果python調用了第三方python庫的話,就會報錯(可能不支援,或者解決辦法是指定第三方庫的路徑,我沒試過)
- 還有一個問題是
它的意思好像是沒有許可權建立一個快取檔案夾,來為己用(windows下的環境,如果linux可能問題會不同,沒試過)
- 相比使用Runtime的方式會更方便一些,而且支援python來import第三方庫
- 這裡特別記錄一下,我的python指令碼中有讀入檔案的操作,當時的檔案路徑是與python在同一檔案夾下的,但是java與它們不在同一路徑下
導致,運行時,不報錯也有輸出,最後找到原因就是,被python讀的檔案路徑java是不知道的
(這裡很奇怪,明明只是使用java運行一下python指令碼,然後python執行,結束將結果輸出在輸出緩衝區,等待java來取,但為什麼一定要讓java知道這個檔案的路徑呢)
解決辦法:
實驗的話,可以直接在python中指定檔案的絕對路徑
更好的方法,將檔案在java中以參數的形式傳遞給python
[Java/Python] java調用python指令碼問題記錄