Hallo,
ich muss aus einem Pythonscript ein Java Programm starten, ich möchte aber, sobald im Java-Prog ein System.out.print erfolgt die Ausgabe im Outputfenster meines Python Scripts sehen.
Momentan sieht meine Lösung so aus:
cmd = javaExe+' '+r'-jar transformation.jar configuration.xml '+ outfile + r' ' + infile
for line in os.popen(cmd).readlines():
<tab>print line
Problem, die Ausgabe des Java-Progs wird erst nach Beendigung des Java-Programmes im Python Output angezeigt. Ich benötige die Java-Outputs aber on-the-fly, da das Programm relativ lange läuft und Zwischenergebnisse ausgibt.
Kleiner Nachtrag ich bin an Python 2.5.1 gebunden und ich möchte kein Konsolenfenster (vom Java Programm) sehen während der Ausführung des Jars.
Gibt es dafür eine Lösung?
Bin für jede Hilfe dankbar!
Java Program aus Python-Script starten mit Output Umleitung
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
[mod]subprocess[/mod]
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Danke
..Falls jemand das gleiche Problem hat, hier meine Lösung:
Basierend auf diesem Post erstellt:
http://mail.python.org/pipermail/python ... 02732.html
Klappt super..
PS. Danke an Rebecca
..Falls jemand das gleiche Problem hat, hier meine Lösung:
Basierend auf diesem Post erstellt:
http://mail.python.org/pipermail/python ... 02732.html
Code: Alles auswählen
import subprocess
proc = subprocess.Popen([javaExe,"-jar","transformation.jar","configuration.xml",outfile, pyfile], cwd =jarWorkdir,stdin=subprocess.PIPE, stdout = subprocess.PIPE, stderr =subprocess.STDOUT, shell = True)
retval= None
while retval == None:
line = proc.stdout.readline()
print line.rstrip()
retval=proc.poll()
PS. Danke an Rebecca
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Änder mal Zeile 5 zu
Code: Alles auswählen
while not retval:
@LazyBall: Das `retval` kann man sogar ganz weglassen, denn wenn das nicht mehr `None` ist, dann *muss* auch `proc.stdout` am Ende sein. Also reicht eine einfache Schleife über `proc.stdout`. Und vielleicht nach der Schleife ein Aufruf von `proc.wait()`.
Das ``shell=True`` sollte aus dem Aufruf von `Popen` noch raus. Die Shell dazwischen ist überflüssig.
Das ``shell=True`` sollte aus dem Aufruf von `Popen` noch raus. Die Shell dazwischen ist überflüssig.