2013-09-16 45 views
1

我使用子進程調用從python腳本調用可執行文件。這些是以下代碼我已經使用:如何在python中獲取返回狀態

try: 
    p = subprocess.Popen([abc.exe], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() 

except Exception as e: 
    print str(e) 

從abc.exe,我已經在故障情況下返回1和對成功的情況下返回0。但我不知道如何檢查python腳本的返回值。

感謝,

+3

此代碼有兩個問題: 1.您忘記了'abc.exe'的引號,這會導致爲不存在的變量'abc'引發NameError。2.您正在捕獲異常,它會捕獲NameError。你應該只捕捉OSError。 –

回答

1

您保存爲p.communicate()的輸出,而不是Popen對象。也許嘗試:

try: 
    p = subprocess.Popen(['abc.exe'], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

except OSError as e: 
    print str(e) 

stdoutdata, stderrdata = p.communicate() 
retcode = p.returncode 
1

另一種方法是使用subprocess.check_output(),因爲你提到了Python 2.7。這將以與Popen相同的參數運行該命令。該命令的輸出以字符串形式返回。如果該命令返回非零值,則會引發subprocess.CalledProcessError異常。

所以我認爲你可以返工您的代碼是這樣的:

try: 
    output = subprocess.check_output(['abc.exe'], shell=True, stderr=subprocess.STDOUT) 
except subprocess.CalledProcessError as ex: 
    # an error occurred 
    retcode = ex.returncode 
    output = ex.output 
else: 
    # no error occurred 
    process(output) 

注意,因爲它是內部使用,不能使用的stdout論點check_output。這裏是docs

相關問題