[Java/Python] java調用python指令碼問題記錄

來源:互聯網
上載者:User

標籤: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指令碼問題記錄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.