[gelöst] Unittest-Ausgaben in Variable speichern?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
dusselmann
User
Beiträge: 70
Registriert: Donnerstag 28. Juli 2005, 12:47
Kontaktdaten:

Dienstag 16. August 2005, 13:08

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... :cry:

Kann mir jemand helfen, bzw. einen Tipp geben?

Viele Grüße, Dussel
Zuletzt geändert von dusselmann am Mittwoch 17. August 2005, 05:55, insgesamt 1-mal geändert.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 16. August 2005, 15:05

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
dusselmann
User
Beiträge: 70
Registriert: Donnerstag 28. Juli 2005, 12:47
Kontaktdaten:

Dienstag 16. August 2005, 15:10

huch.. stimmt. Schreib ne GTK-Anwendung ;)
Leonidas hat geschrieben:Versuch mal auch stderr mitzuspeichern, es kann gut sein, dass unittests auch dort ausgegeben werden.
genau da weiß ich nicht wie... Der Aufruf funktioniert wie folgt (genaue Syntax hab ich jetzt nicht im Kopf):

variable = konsolenaufruf("python unittest.py")

Wie kann ich dann stderr mitspeichern?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 16. August 2005, 17:45

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.

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
Ja, unittest gibt tatsächlich auf stderr aus.. das wusste ich noch nicht, aber wenn man überlegt, macht das sogar wirklich Sinn.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
dusselmann
User
Beiträge: 70
Registriert: Donnerstag 28. Juli 2005, 12:47
Kontaktdaten:

Dienstag 16. August 2005, 19:53

Das ist ja cool. Danke dir!

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)
folgende Fehlermeldung:

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
Woran kann das liegen? Hab ich das Modul subprocess nicht?

Gruß, Dussel
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 16. August 2005, 20:02

dusselmann hat geschrieben:Woran kann das liegen? Hab ich das Modul subprocess nicht?
Doch, das hast du (in /usr/lib/python2.4/subprocess.py). Und mein simples Beispiel funktioniert bei dir?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
dusselmann
User
Beiträge: 70
Registriert: Donnerstag 28. Juli 2005, 12:47
Kontaktdaten:

Dienstag 16. August 2005, 20:06

gleiche meldung...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 16. August 2005, 20:46

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 Modvoice
Benutzeravatar
dusselmann
User
Beiträge: 70
Registriert: Donnerstag 28. Juli 2005, 12:47
Kontaktdaten:

Dienstag 16. August 2005, 20:50

WOW!!! Vielen Dank! Du hast mir sehr geholfen!!!

:D Jetzt hat es funktioniert
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 17. August 2005, 06:43

Probiere es doch nochmal so:

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()
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.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten