2016-08-03 159 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脚本跑!