[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