2016-08-03 3 views
0

Я работаю над проектом с использованием Java и Python, используя Java для графического интерфейса и Python для бэкэнд. Программа Java вызывает сценарий Python, когда кнопка нажата, используя следующий код:Вызов скрипта python из файла jar java

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) 

Сценарий питон находится в папке ресурсов в ГКЗ папке проекта Java. Этот код работает, когда я запускаю свою программу в моей среде IDE (IntelliJ), однако, когда я создаю файл .jar и пытаюсь запустить скрипт, ничего не происходит. Я могу подтвердить, что программа все еще находит скрипт в файле .jar. Как запустить скрипт?

+0

Вставить 'System.out.println (" Scriptpath: "+ scriptPath);' перед 'r.exec (...)'. Может быть, это дает вам подсказку – JimHawkins

+0

@ JimHawkins Я добавил JOptionDialog, чтобы отобразить это, когда я запускаю банку, и в ней находится скрипт python. –

+1

Вы можете перенести сценарий из своего src и разместить его снаружи. Если его часть src, она входит в банку, которая сама является компактным файлом. Метод 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); 
     } 
    } 
} 

ру/test.py

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

Выход:

Я запустил скрипт Python!

Я сценарий Python !!!

Python script ran !!

Смежные вопросы