2010-05-18 40 views
7

Python 2.6.4的Windows版本:有沒有什麼方法可以確定在使用shell = True時subprocess.Popen()是否失敗?當shell = True時,如何確定subprocess.Popen()失敗

POPEN()成功時失敗殼=假

>>> import subprocess 
>>> p = subprocess.Popen('Nonsense.application', shell=False) 
Traceback (most recent call last): 
    File ">>> pyshell#258", line 1, in <module> 
    p = subprocess.Popen('Nonsense.application') 
    File "C:\Python26\lib\subprocess.py", line 621, in __init__ 
    errread, errwrite) 
    File "C:\Python26\lib\subprocess.py", line 830, in 
_execute_child 
    startupinfo) 
WindowsError: [Error 2] The system cannot find the file specified 

但當殼=真,似乎沒有辦法確定一個POPEN()調用成功與否。

>>> p = subprocess.Popen('Nonsense.application', shell=True) 
>>> p 
>>> subprocess.Popen object at 0x0275FF90>>> 
>>> p.pid 
6620 
>>> p.returncode 
>>> 

想法讚賞。

問候, 馬爾科姆

回答

15

returncode將工作,但它會是None,直到您撥打p.poll()poll()本身將返回錯誤代碼,所以你可以做

if a.poll() != 0: 
    print ":(" 
+0

謝謝你的答案。 poll()接着是returncode技術正是我尋找的解決方案。 – Malcolm 2010-05-19 16:59:04

5

在它未能啓動所述第一情況下,在第二 - 它啓動成功殼,這反過來,無法執行該應用程序。所以你的過程已經適當地產生,退出並等待你詢問退出代碼。所以,事情是,,除非你的外殼或環境(例如沒有內存)被完全破壞,沒有辦法Popen本身可能會失敗

所以,你可以放心地.poll().wait()就可以得到所有的不幸的消息。

相關問題