Return value von popen bevor das file-Object geclosed wird

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
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Freitag 12. Januar 2007, 10:53

Hi,

ich möchte in einem Script mit os.popen ein Befehl ausführen, den Rückgabewert des Befehls überprüfen, und wenn es keinen Fehler gab, die Ausgabe des Befehls auswerten.

Code: Alles auswählen

dump = os.popen(r'dcmdump c:\powerbook.dcm')
if not dcmdump_return: #hier wird der noch nicht existierende return value abgefragt
    for line in dump:
        print line
dcmdump_return = dump.close()

Funktioniert natürlich nicht, weil dcmdump_return erst definiert wird, nachdem es bereits ausgelesen ist.

Als Lösung speichere ich die Zeilen aus dump erst in eine Liste, schließe dump, prüfe den return value, und bearbeite dann gegebenenfalls den Inhalt der Liste.

Code: Alles auswählen

 dump = os.popen(r'dcmdump c:\powerbook.dcm')
 dump_list = []
 for line in dump:
     dump_list.append(line)

 dcmdump_return = dump.close()
 if not dcmdump_return:
     for line in dump_list:
         print line
Dieser Umweg über die Liste gefällt mir aber nicht sonderlich, das fühlt sich irgendwie unnötig kompliziert an. Habe ich hier vielleicht eine einfachere Möglichkeit übersehen? Ist zwar vermutlich rein kosmetisch, aber ich bin trotzdem für jeden sachdienlichen Hinweis dankbar :)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 12. Januar 2007, 11:36

Den Rückgabewert bekommt man auch schön über das Modul subprocess.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Luzandro
User
Beiträge: 87
Registriert: Freitag 21. April 2006, 17:03

Freitag 12. Januar 2007, 11:50

Du könntest natürlich statt der Liste den kompletten Output gleich direkt in einen String lesen, aber du wirst kaum den Rückgabewert vor der Ausgabe des Programms bekommen...

Code: Alles auswählen

dcmdump = os.popen(r'dcmdump c:\powerbook.dcm')
dump = dcmdump.read()
if dcmdump.close() is not None:
    print dump
[url=http://www.leckse.net/artikel/meta/profilieren]Profilieren im Netz leicht gemacht[/url]
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Freitag 12. Januar 2007, 12:11

Danke für die Antworten :)

subprocess sah zwar im ersten Moment etwas komplex, tut aber genau was ich gerne hätte. Ich sollte mir endlich ein neueres Buch besorgen...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 12. Januar 2007, 15:57

Nirven hat geschrieben:Ich sollte mir endlich ein neueres Buch besorgen...
Oder [wiki]Neue Features[/wiki] lesen und erweitern, damit noch mehr Leute was davon haben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten