Seite 1 von 1
Kommandozeilenausgabe von os.popen abfangen
Verfasst: Sonntag 9. August 2009, 10:06
von Greesce
Ich habe in meinem Programm eine Funktion enthalten die folgendermaßen
lautet:
Code: Alles auswählen
def OnRun(self,event):
command = "g++ " + str(self.file)# + "-o " + binname
ausgabe = os.popen(command)
for line in ausgabe:
self.console.ChangeValue(line)
Das ganze ist ein Event von wxPython was aber hier nichts zur Sache tut.
Wenn ich jetzt das Programm starte zeigt er mir die ganzen Ausgaben von
g++ in der Kommandozeile an, aber nicht in dem Textfeld das console heißt.
Was ist daran der Fehler?
Hoffe ihr könnt mir helfen.
MfG
Greesce
P.S.
self.file ist ein absoluter Pfad zur Quelcode-Datei
Verfasst: Sonntag 9. August 2009, 10:24
von EyDu
Du hast die Doku zu os.popen gelesen, oder?
Deprecated since version 2.6: This function is obsolete. Use the subprocess module. Check especially the Replacing Older Functions with the subprocess Module section.
Verfasst: Sonntag 9. August 2009, 10:37
von Greesce
nein, aber ich habe leider nur die alte version von "Python - Das umfassende Handbuch" zu Python 2.5, aber wie wäre es dann möglich das ganze abzurufen?
Verfasst: Sonntag 9. August 2009, 11:06
von BlackJack
@Greesce: Das `subprocess`-Modul gibt es auch schon in Python 2.5.
Und das Buch ist nicht unbedingt zu empfehlen.
Verfasst: Sonntag 9. August 2009, 12:21
von problembär
@Greesce: Glaub' nicht alles, was die Leute hier erzählen.
subprocess ist zwar neuer, besser usw., manchmal aber auch Overkill. Probier mal:
Code: Alles auswählen
fh = os.popen(command)
ausgabe = fh.readlines()
fh.close()
Gruß
Verfasst: Sonntag 9. August 2009, 12:42
von cofi
``subprocess`` ist da nicht sonderlich anders:
Code: Alles auswählen
proc = subprocess.Popen(command, stdout=subprocess.PIPE)
output = proc.communicate()
``proc.communicate`` gibt allerdings ``stdout`` _und_ ``stderr`` zurueck.
Man muss sie aber explizit in die PIPE haengen.
Verfasst: Sonntag 9. August 2009, 13:53
von snafu
problembär hat geschrieben:@Greesce: Glaub' nicht alles, was die Leute hier erzählen.
Was erzählen die Leute denn so Unwahrheiten? Was meinst du eigentlich, warum os.Popen "deprecated" ist... Weißt du überhaupt, was "deprecated" bedeutet?
problembär hat geschrieben:subprocess ist zwar neuer, besser usw., manchmal aber auch Overkill.
Das ist eine Begründung, die man eigentlich nur für einen Scherz halten kann.
Verfasst: Sonntag 9. August 2009, 13:59
von DasIch
problembär hat geschrieben:subprocess ist zwar neuer, besser usw., manchmal aber auch Overkill.
Sauberes Escaping ist sicherlich overkill

Verfasst: Sonntag 9. August 2009, 14:17
von snafu
Alles, was über "funktioniert" hinaus geht, ist totaler Overkill!
Man sollte auch grundsätzlich den Befehl zum Schließen von Dateien meiden, weil man damit nur unnötige Bytes im Quellcode verbraucht.

Von den Nanosekunden an zusätzlicher Rechenzeit mal abgesehen...
Verfasst: Sonntag 9. August 2009, 14:20
von cofi
Ei warum macht ihr denn jetzt Jagd auf Bruno? Einmal erwaehnen reicht dann doch
