[Python-de] os.system Fehler auswerten

Philipp Kraus philipp.kraus at flashpixx.de
Fr Nov 4 17:08:28 CET 2011


On 2011-11-04 15:54:11 +0100, Peter Otten said:

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

Ach so, nein ich möchte dass die Meldung angezeigt wird, denn wenn ein 
configure / make
einen Fehler produziert, dann soll man sie ja sehen können.



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

Danke

Phil



Mehr Informationen über die Mailingliste python-de