# Mit Java ein Python Programm starten



## eniddelemaj (28. Sep 2017)

Ich stehe gerade vor dem Problem, dass ich mit einem Java Programm, ein Python Programm öffnen möchte. Mein Ansatz ist dieser:

```
try
        {
            ProcessBuilder pb = new ProcessBuilder("python","Connect.py");
            Process p = pb.start();

        }
        catch(Exception e)
        {
            System.out.println(e);
        }
```

Über die cmd lässt sich Python genau so öffnen. Wenn ich das über das Programm starten lasse erhalte ich jedoch die Fehlermeldung:
java.io.IOException: Cannot run program "python": CreateProcess error=2, Das System kann die angegebene Datei nicht finden

Ich habe schon ausgiebig nach dem Fehler gegooglet, aber bei mir scheint das Problem ein 
anderes zu sein.
Ich habe mein Wissen über den ProcessBuilder unter anderem aus diesem Tut:
https://bytes.com/topic/python/insights/949995-three-ways-run-python-programs-java

Ich hoffe Ihr könnt mir helfen. Danke für eure Antworten im Voraus!


----------



## VfL_Freak (28. Sep 2017)

Moin,
klingt für mich so, als wenn da ein Pfad nicht oder falsch gesetzt ist ...



eniddelemaj hat gesagt.:


> Über die cmd lässt sich Python genau so öffnen


was bedeutet "genau so" ??
Was gibst Du da genau ein ??

VG Klaus


----------



## dzim (28. Sep 2017)

Schon mal auf der Kommandozeile ausprobiert? Und statt `python` mal `python.exe` verwendet? Ist das Python-bin-Verzeichnis denn überhaupt im PATH (mal die Umgebungsvariablen überprüfen!)?

Weitere Ideen:
https://stackoverflow.com/questions...r-2-the-system-cannot-find-the-file-specified
https://stackoverflow.com/questions/29113042/the-system-cannot-find-the-file-specified-java


----------



## eniddelemaj (28. Sep 2017)

VfL_Freak hat gesagt.:


> Moin,
> klingt für mich so, als wenn da ein Pfad nicht oder falsch gesetzt ist ...
> 
> 
> ...



Ja du hattest recht ich hatte einen Fehler im Pfad.
Die Fehlermeldung tritt jetzt nicht mehr auf, jedoch passiert nichts.
Also wenn ich den Code ausführe wird kein Programm geöffnet. 
Es passiert einfach nichts.


----------



## eniddelemaj (28. Sep 2017)

dzim hat gesagt.:


> Schon mal auf der Kommandozeile ausprobiert? Und statt `python` mal `python.exe` verwendet? Ist das Python-bin-Verzeichnis denn überhaupt im PATH (mal die Umgebungsvariablen überprüfen!)?
> 
> Weitere Ideen:
> https://stackoverflow.com/questions...r-2-the-system-cannot-find-the-file-specified
> https://stackoverflow.com/questions/29113042/the-system-cannot-find-the-file-specified-java




ja um den Path habe ich mich gekümmert. Mit python.exe passiert auch nichts.


----------



## VfL_Freak (28. Sep 2017)

Moin,


eniddelemaj hat gesagt.:


> Es passiert einfach nichts


tja, ich kenne mich mit Python selbnst gar nichts aus.

Hast du es mal mit 
	
	
	
	





```
p.waitFor()
```
 versucht ??
https://docs.oracle.com/javase/7/docs/api/java/lang/Process.html
https://www.tutorialspoint.com/java/lang/process_waitfor.htm

VG Klaus


----------



## eniddelemaj (28. Sep 2017)

VfL_Freak hat gesagt.:


> Moin,
> 
> tja, ich kenne mich mit Python selbnst gar nichts aus.
> 
> ...



Ja habe ich ausprobiert. Hat aber leider nicht geklappt.
Ich habe in das Python Programm eine input() Funktion
nach der Ausgabe geschrieben, damit sich das Programm
nicht wieder direkt schließt. Das hat aber leider auch nichts gebracht.


----------



## VfL_Freak (28. Sep 2017)

Moin,


eniddelemaj hat gesagt.:


> Ja habe ich ausprobiert.


Wie ??
Welcher Code ??

VG Klaus


----------



## eniddelemaj (28. Sep 2017)

VfL_Freak hat gesagt.:


> Moin,
> 
> Wie ??
> Welcher Code ??
> ...




```
try
        {
            ProcessBuilder pb = new ProcessBuilder("python","Connect.py");
            Process p = pb.start();
            p.waitFor();

        }
        catch(Exception e)
        {
            System.out.println(e);
        }
```


----------



## VfL_Freak (28. Sep 2017)

eniddelemaj hat gesagt.:


> Ich habe in das Python Programm eine input() Funktion
> nach der Ausgabe geschrieben


und das Programm käuft sonst einwandfrei ???


----------



## eniddelemaj (28. Sep 2017)

VfL_Freak hat gesagt.:


> und das Programm käuft sonst einwandfrei ???



ja das programm läuft, wenn ich es von selbst starte.


----------



## Nuiton (28. Sep 2017)

Vielleicht hilft das: https://bytes.com/topic/python/insights/949995-three-ways-run-python-programs-java


----------



## JStein52 (28. Sep 2017)

Oder du lässt dir mal ausgeben ob Python irgendwelche Fehlerausgaben blubbert:

```
ProcessBuilder builder = new ProcessBuilder("python", "Connected.py");
            Process p = builder.start();

            Scanner s = new Scanner(p.getErrorStream()).useDelimiter("\\Z");
            if (s.hasNext()) {
                System.out.println(s.next());
                s.close();
            }
```


----------



## JStein52 (28. Sep 2017)

eniddelemaj hat gesagt.:


> ja das programm läuft, wenn ich es von selbst starte.


Was erwartest du eigentlich was passieren sollte / was dein Python-Programm macht ??


----------



## eniddelemaj (29. Sep 2017)

Entschuldigt bitte die späte Antwort!



JStein52 hat gesagt.:


> Oder du lässt dir mal ausgeben ob Python irgendwelche Fehlerausgaben blubbert:
> 
> ```
> ProcessBuilder builder = new ProcessBuilder("python", "Connected.py");
> ...



Es passiert nichts..



JStein52 hat gesagt.:


> Was erwartest du eigentlich was passieren sollte / was dein Python-Programm macht ??


Es gibt einfach nur "Hey" aus
Wie gesagt das Programm selbst ist fehlerfrei. Wenn ich es starte
dann läuft es auch ganz normal.


----------



## eniddelemaj (29. Sep 2017)

Nuiton hat gesagt.:


> Vielleicht hilft das: https://bytes.com/topic/python/insights/949995-three-ways-run-python-programs-java



In meiner Frage habe ich auf genau diese Seite verwiesen. Aber trotzdem danke für deine Antwort!


----------



## JStein52 (29. Sep 2017)

eniddelemaj hat gesagt.:


> Es gibt einfach nur "Hey" aus


Und wohin solle es das dann ausgeben ? Wahrscheinlich gibt es das ja auch aus, nur du siehst es nicht. Schreibe mal "Hey" in eine Datei


----------



## eniddelemaj (29. Sep 2017)

JStein52 hat gesagt.:


> Und wohin solle es das dann ausgeben ? Wahrscheinlich gibt es das ja auch aus, nur du siehst es nicht. Schreibe mal "Hey" in eine Datei



krass man danke es hat funktioniert! wie dumm eig da hätte ich
auch selber drauf kommen können. 
danke an alle für eure mühen!


----------



## eniddelemaj (29. Sep 2017)

bleibt jetzt nur die frage warum keine konsole geöffnet wurde. aber das ist nicht ganz so schlimm. hauptsache
das programm wird aufgerufen. ich arbeite gerade an einem raspberry pi projekt wobei ich dies brauchte.


----------



## JStein52 (29. Sep 2017)

eniddelemaj hat gesagt.:


> bleibt jetzt nur die frage warum keine konsole geöffnet wurde


Warum sollte denn eine Konsole geöffnet werden ? Das hast du nicht programmiert. Probiere mal so was:


```
ProcessBuilder builder = new ProcessBuilder("cmd", "/K", "python connect.py");
```
Du bist doch auf Windows oder ?


----------



## eniddelemaj (30. Sep 2017)

JStein52 hat gesagt.:


> Warum sollte denn eine Konsole geöffnet werden ? Das hast du nicht programmiert. Probiere mal so was:
> 
> 
> ```
> ...



Ich hätte gedacht, dass die Konsole mit "print()" automatisch geöffnet wird. Aber wenn ich darüber weiter nachdenke wird mir auch klar, dass dann nicht so ohne weiteres eine Konsole geöffnet wird.

Ja mit cmd hat es geklappt!
Nochmals danke


----------

