Ejecutando un archivo python desde JAR

Estoy tratando de averiguar cómo hacer referencia a un archivo python para poder ejecutarlo dentro de un Java GUI Jar. Debe ser una solución portátil, por lo que usar rutas absolutas no funcionará para mí. A continuación, he enumerado la estructura de mi proyecto y he incluido el código de cómo bash ejecutar el script de Python. He leído algunas cosas sobre el uso de recursos, pero no he podido implementar esto correctamente. ¡Aprecio cualquier ayuda que pueda proporcionar!

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { try { Runtime rt = Runtime.getRuntime(); Process pr = rt.exec("python /scripts/script.py"); BufferedReader bfr = new BufferedReader(new InputStreamReader(pr.getInputStream())); String line = ""; while((line = bfr.readLine()) != null) System.out.println(line); } catch(Exception e) { System.out.println(e.toString()); } } --OneStopShop (Project) --Source Packages --images --onestopshop --Home.java --scripts --script.py 

Iniciar una ruta de archivo con / significa que desea comenzar en la raíz de su sistema de archivos.

Tu código funcionó para mí simplemente eliminando esa barra diagonal:

 public static void main(String[] args) { try { File python = new File("scripts/script.py"); System.out.println(python.exists()); // true Runtime rt = Runtime.getRuntime(); Process pr = rt.exec("python scripts/script.py"); // print('Hello!') BufferedReader bfr = new BufferedReader(new InputStreamReader(pr.getInputStream())); String line = ""; while((line = bfr.readLine()) != null) System.out.println(line); } catch(Exception e) { System.out.println(e.toString()); } } // true // Hello! // Process finished with exit code 0 

La razón por la que poner un archivo incorrecto no mostró un error es porque este código Java solo muestra la secuencia de entrada ( getInputStream() ), no la secuencia de error ( getErrorStream() ):

  public static void main(String[] args) { try { Runtime rt = Runtime.getRuntime(); Process pr = rt.exec("python scripts/doesnotexist.py"); BufferedReader bfr = new BufferedReader(new InputStreamReader(pr.getErrorStream())); String line = ""; while((line = bfr.readLine()) != null) System.out.println(line); } catch(Exception e) { System.out.println(e.toString()); } } // python: can't open file 'scripts/doesnotexist.py': [Errno 2] No such file or directory // Process finished with exit code 0