2014-12-03 14 views
8

Sto tentando di eseguire un file .py dal codice java. Mi muovo il file .py nella directory di default del mio progetto Java e io lo chiamo utilizzando il seguente codice:Esecuzione di un file .py da Java

String cmd = "python/"; 
    String py = "file"; 
    String run = "python " +cmd+ py + ".py"; 
    System.out.println(run); 
    //Runtime.getRuntime().exec(run); 

    Process p = Runtime.getRuntime().exec("python file.py"); 

Sia utilizzando corsa variabile, o l'intero percorso o "python file.py" il mio codice viene eseguito mostrando il messaggio build riuscito tempo totale 0 secondi senza eseguire il file.py. Qual è il mio problema qui?

+0

‘Build successo’ suona come il risultato di una compilazione * *. Come stai correndo questo? – Biffen

+2

possibile duplicato di [Come eseguire un file Python da Java utilizzando un percorso assoluto?] (Http://stackoverflow.com/questions/21081898/how-to-run-a-python-file-from-java-using- an-absolute-path) –

+0

Lo eseguo con il tasto play o con il tasto destro del mouse ed eseguo il file. –

risposta

7

È possibile utilizzare in questo modo anche:

String command = "python /c start python path\to\script\script.py"; 
Process p = Runtime.getRuntime().exec(command + param); 

o

String prg = "import sys"; 
BufferedWriter out = new BufferedWriter(new FileWriter("path/a.py")); 
out.write(prg); 
out.close(); 
Process p = Runtime.getRuntime().exec("python path/a.py"); 
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String ret = in.readLine(); 
System.out.println("value is : "+ret); 

Run Python script from Java

+0

Che cos'è la variabile param? = "python c start python influencersDataset_edgelist.py"; Process p = Runtime.getRuntime(). exec (c); ma lo stesso si crea in 0 secondi. –

+0

Parametro @FereRes indica se si desidera inviare un parametro nello script quindi questo è il modo ... – Prateek

+0

Strano se copio il percorso python \ su \ script \ script.py per console funziona bene, tuttavia qui con pb non reagisce –

4

Credo che possiamo usare ProcessBuilder

Runtime.getRuntime().exec("python "+cmd + py + ".py"); 
..... 
since exec has its own process we can use that 
ProcessBuilder builder = new ProcessBuilder("python", py + ".py"); 
builder.directory(new File(cmd)); 
builder.redirectError(); 
.... 
Process newProcess = builder.start(); 
+0

Eccezione nel thread "main" java.io.IOException: impossibile eseguire il programma "python" (nella directory "python python \ file.py"): errore CreateProcess = 267, il nome della directory non è valido. Ho provato l'intero percorso ma ho ottenuto lo stesso. –

+0

prova a cambiare la stringa in un array. Credo che funzionerà. 'String [] cmd = new String [] {" python, "...", ".."} ' – Maddy

+0

Impossibile eseguire il programma" python "(nella directory" python C: \ Users \ path \ file.py "): Errore CreateProcess = 267, Il nome della directory non è valido. Uso String [] command = new String [] {"python", cmd + py + ". Py"}; –

1

È possibile eseguire lo script python

Process p = Runtime.getRuntime().exec(PYTHON_ABSOLUTE_PATH, script_path) 

Per ottenere il PYTHON_ABSOLUTE_PATH basta digitare

which python2.7 

nel terminale

Problemi correlati