[Python-de] os.system Fehler auswerten

Peter Otten __peter__ at web.de
Fr Nov 4 15:54:11 CET 2011


Philipp Kraus wrote:

> On 2011-11-04 14:35:38 +0100, Peter Otten said:
> 
>> Philipp Kraus wrote:
>> 
>>> Hallo,
>>> 
>>> ich nutze Scons (http://www.scons.org/) um verschiedene Targets
>>> umzusetzen, unter anderem rufe ich aus dem Sconsscript via os.system
>>> das Unixbekannte "configure, make, make install" auf. Falls nun das nun
>>> fehlschlägt, kann man das irgendwie dedektieren, also z.B. wenn das
>>> make irgendwelche includes nicht findet und abbricht, kann ich dann in
>>> meinem Sconsscript darauf reagieren?
>> 
>> Ich empfehle subprocess.call/Popen statt os.system.
>> 
>>>>> subprocess.call(["ls", "not-there"], stderr=open("/dev/null", "w"))
>> 2
>> 
>> Wenn der returncode nicht ausreicht, lässt sich auch die Ausgabe auf
>> stdout oder stderr abfangen:
>> 
>>>>> p = subprocess.Popen(["ls", "not-there"], stderr=subprocess.PIPE)
>>>>> p.communicate()
>> (None, 'ls: Zugriff auf not-there nicht m\xc3\xb6glich: No such file or
>> directory\n')
>>>>> p.returncode
>> 2
> 
> Vielen Dank, ich werde mich damit mal befassen, aber es klingt viel
> versprechend.
> Mit Deinem Beispielcode habe ich nur das Problem, Du machst ein open auf
> /dev/null wie sieht das aus, wenn das Pythonscript unter Windows läuft, da
> existiert ja formal kein /dev/null?

Das ist eigentlich unnötig, ich habe es nur hinzugefügt, damit die 
Fehlermeldung verschwindet und klar wird, dass der Rückgabewert von call() 2 
ist. 

Falls du es doch benutzen willst: betriebssystemübergreifend kannst du 
derzeit open(os.devnull, "wb") verwenden

http://docs.python.org/library/os.html#os.devnull

und demnächst (Python 3.3) subprocess.DEVNULL.



Mehr Informationen über die Mailingliste python-de