1. 程式人生 > >[Java/Python] java調用python腳本問題記錄

[Java/Python] java調用python腳本問題記錄

err python 運行時 .exe 不同 erp 第三方庫 rac tac

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腳本問題記錄