2010-05-18 16 views
7

पायथन 2.6.4 का विंडोज संस्करण: क्या यह निर्धारित करने का कोई तरीका है कि subprocess.Popen() खोल = सही का उपयोग करते समय विफल रहता है?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

अपने उत्तरों के लिए धन्यवाद। रिटर्नकोड तकनीक के बाद मतदान() वास्तव में वह समाधान है जिसे मैं ढूंढ रहा था। – Malcolm

5

पहला मामला इसे शुरू करने में विफल रहता है, दूसरे में - इसे सफलतापूर्वक खोल जो, बारी में, आवेदन निष्पादित नहीं हो पाता शुरू होता है। तो आपकी प्रक्रिया ठीक से उत्पन्न हो गई है, बाहर निकल गई है और इसके बाहर निकलने के बारे में पूछताछ करने के लिए इंतजार कर रहा है। तो, बात यह है कि जब तक कि आपका खोल या पर्यावरण (उदा। कोई स्मृति नहीं) पूरी तरह टूटा हुआ है, वहां कोई रास्ता नहीं है Popen स्वयं विफल हो सकता है।

तो, आप सभी दुखद समाचार प्राप्त करने के लिए सुरक्षित रूप से .poll() और .wait() सुरक्षित कर सकते हैं।

संबंधित मुद्दे