2009-11-08 29 views
20

Nie jestem pewien, co oznacza wartość zwracana przez subprocess.call().Jaka jest wartość zwracana przez subprocess.call()?

  • Czy mogę bezpiecznie założyć wartość zerową zawsze oznacza, że ​​polecenie zostało wykonane pomyślnie?

  • Czy wartość zwracana jest odpowiednikiem wartości wyjściowej polecenia powłoki?

Czy na przykład poniższy kod będzie działał praktycznie dla każdego polecenia w systemie Linux?

cmd = "foo.txt > bar.txt" 
ret = subprocess.call(cmd, shell=True) 
if ret != 0: 
    if ret < 0: 
     print "Killed by signal", -ret 
    else: 
     print "Command failed with return code", ret 
else: 
    print "SUCCESS!!" 

Proszę mnie oświecić :-)

Odpowiedz

7

Jest to kod powrotu, ale należy pamiętać, że to do autora podproces co oznacza kod zwrotny. Istnieje silna kultura 0 oznacza sukces, ale nic nie wymusza tego.

4

Jesteś na łasce komend, do których dzwonisz. Rozważ to:

test.py

#!/usr/bin/env python 
success=False 
if not success: 
    exit() 

następnie uruchomić swój kod (z cmd = 'test.py') spowoduje SUKCES !!

tylko dlatego, że test.py nie jest zgodny z konwencją zwracania niezerowej wartości, gdy nie zakończyła się pomyślnie.

Powiązane problemy