2016-08-03 82 views
0

我正在使用Java和Python爲後端GUI和Python使用Java的項目。 Java程序調用按鈕時使用下面的代碼按下一個Python腳本:從Java jar文件調用python腳本

Runtime r = Runtime.getRuntime(); 
String pyScript = "resources/script.py"; 
String scriptPath = getClass().getResource(pyScript).toExternalForm(); 
// Strip "file/" from path 
scriptPath = scriptPath.substring(scriptPath.indexOf("/") + 1); 
Process p = r.exec("python " + scriptPath) 

的Python腳本位於一個名爲資源,在Java項目的src文件夾文件夾中。當我在我的IDE(IntelliJ)中運行我的程序時,此代碼正常工作,但是當我創建.jar文件並嘗試運行該腳本時,什麼都不會發生。我可以確認程序仍然在.jar文件中找到腳本。 我怎樣才能讓腳本運行?

+0

插入'的System.out.println( 「SCRIPTPATH:」 + SCRIPTPATH);''之前r.exec(...)'。也許這給你一個提示我加 – JimHawkins

+0

@JimHawkins一個JOptionDialog顯示,當我運行jar,它位於python腳本。 –

+1

您可以將腳本從你的src外放置。如果它是src的一部分,它被捆綁在本身是一個緊湊文件的jar文件中。一個Alrernate的方法是在運行時動態創建script.py,執行它並刪除.py文件 – Aditya

回答

0

在此解決方案中,如果文件存在,我們運行腳本。該腳本可以在完整或相對路徑上。該腳本不在jar文件中。

TestPython.java

import java.lang.*; 
import java.io.*; 

public class TestPython { 
    public static void main(String[] args) { 

     System.out.println("I will run a Python script!"); 
     Runtime r = Runtime.getRuntime(); 
     String pyScript = "py/test.py"; 

     File f = new File(pyScript); 
     if (f.exists() && !f.isDirectory()) { 
      try { 
       Process p = r.exec("python " + pyScript); 
       BufferedReader in = new BufferedReader(
        new InputStreamReader(p.getInputStream())); 
       String line = null; 
       while ((line = in .readLine()) != null) { 
        System.out.println(line); 
       } 
       System.out.println("Python script ran!!"); 
      } catch (Exception ex) { 
       System.out.println("Something bad happened!!"); 
       ex.printStackTrace(); 
      } 
     } else { 
      System.out.println("Unexistent file!" + pyScript); 
     } 
    } 
} 

PY/test.py

print("I'm a Python script!!!") 

輸出:

我將運行一個Python腳本!

我是一個Python腳本!

Python腳本跑!