Hi @all,
kann ich die Ausgaben, die bei der Durchführung eines Unittests ausgegeben werden (in der Konsole), in eine Variable umleiten? Bzw. auf den normalen Sysout?
Ich rufe Unittests aus einem 2 Programm heraus auf (als UNIX-Kommando "python unixtest.py") und speichere das, was in den normalen Sysout geschrieben wird in einer Variablen zur weiteren Verarbeitung. Allerdings komme ich dadurch nicht an diese Unittest-Ausgaben...
Kann mir jemand helfen, bzw. einen Tipp geben?
Viele Grüße, Dussel
[gelöst] Unittest-Ausgaben in Variable speichern?
- dusselmann
- User
- Beiträge: 70
- Registriert: Donnerstag 28. Juli 2005, 12:47
- Kontaktdaten:
Zuletzt geändert von dusselmann am Mittwoch 17. August 2005, 05:55, insgesamt 1-mal geändert.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich habe das Thema verschoben, da es nicht ersichtlich war, was es mit GTK oder GNOME zu tun hatte.
Versuch mal auch stderr mitzuspeichern, es kann gut sein, dass unittests auch dort ausgegeben werden.
Versuch mal auch stderr mitzuspeichern, es kann gut sein, dass unittests auch dort ausgegeben werden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- dusselmann
- User
- Beiträge: 70
- Registriert: Donnerstag 28. Juli 2005, 12:47
- Kontaktdaten:
huch.. stimmt. Schreib ne GTK-Anwendung
variable = konsolenaufruf("python unittest.py")
Wie kann ich dann stderr mitspeichern?
genau da weiß ich nicht wie... Der Aufruf funktioniert wie folgt (genaue Syntax hab ich jetzt nicht im Kopf):Leonidas hat geschrieben:Versuch mal auch stderr mitzuspeichern, es kann gut sein, dass unittests auch dort ausgegeben werden.
variable = konsolenaufruf("python unittest.py")
Wie kann ich dann stderr mitspeichern?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ob bei deinem Programm GTK oder Qt verwendet wird ist bei diesem problem völlig egal.
Das Problem ist jedoch einfach mit dem Modul subprocess zu lösen.
Ja, unittest gibt tatsächlich auf stderr aus.. das wusste ich noch nicht, aber wenn man überlegt, macht das sogar wirklich Sinn.
Das Problem ist jedoch einfach mit dem Modul subprocess zu lösen.
Code: Alles auswählen
from subprocess import Popen, PIPE
cmd = 'python test_wasauchimmer.py'
p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
unittest_output = p.stderr.read()
returncode = p.wait()
print returncode
print unittest_output
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- dusselmann
- User
- Beiträge: 70
- Registriert: Donnerstag 28. Juli 2005, 12:47
- Kontaktdaten:
Das ist ja cool. Danke dir!
Hab das mal in mein Programm gebastelt:
folgende Fehlermeldung:
Woran kann das liegen? Hab ich das Modul subprocess nicht?
Gruß, Dussel
Hab das mal in mein Programm gebastelt:
Code: Alles auswählen
for file in self.__toggle:
cmd = 'python ' + file
p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
unittest_output = p.stderr.read()
returncode = p.wait()
self.__controller.insert_text(unittest_output + ' ' + returncode)
Code: Alles auswählen
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.4/threading.py", line 442, in __bootstrap
self.run()
File "/home/dusselmann/development/Programme/Workspace/PythonProjekt/UnittestChooser/UnittestChooser.py", line 213, in run
p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
File "/usr/lib/python2.4/subprocess.py", line 558, in __init__
errread, errwrite)
File "/usr/lib/python2.4/subprocess.py", line 991, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Gruß, Dussel
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Doch, das hast du (in /usr/lib/python2.4/subprocess.py). Und mein simples Beispiel funktioniert bei dir?dusselmann hat geschrieben:Woran kann das liegen? Hab ich das Modul subprocess nicht?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- dusselmann
- User
- Beiträge: 70
- Registriert: Donnerstag 28. Juli 2005, 12:47
- Kontaktdaten:
gleiche meldung...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Hmm, das sollte eigentlich nicht sein, aber gut, auf ein neues:
Code: Alles auswählen
import popen2
cmd = 'python test_wasauchimmer.py'
child_outstream, child_stdin = popen2.popen4(cmd)
unittest_output = child_outstream.read()
print unittest_output
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- dusselmann
- User
- Beiträge: 70
- Registriert: Donnerstag 28. Juli 2005, 12:47
- Kontaktdaten:
WOW!!! Vielen Dank! Du hast mir sehr geholfen!!!
Jetzt hat es funktioniert
Jetzt hat es funktioniert
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Probiere es doch nochmal so:
So werden die Ausgaben auf stderr nach stdout umgeleitet. Somit erhält man beides zusammen...
Evtl. kann man auch das CurrentWoringDir angeben, halt das start Verzeichniss.
Code: Alles auswählen
import subprocess
cmd = 'python test_wasauchimmer.py'
process = subprocess.Popen(
cmd,
# cwd = ".", # Verzeichnis indem losgelegt werden soll
shell = True,
stdout = subprocess.PIPE,
stderr = subprocess.STDOUT
)
print process.stdout.read()
Evtl. kann man auch das CurrentWoringDir angeben, halt das start Verzeichniss.