2013-01-09 14 views
7

मैं Pypron में subprocess.call के साथ एक बाहरी अनुप्रयोग चलाने की कोशिश कर रहा हूं। जो मैंने इसे पढ़ा है उससे subprocess.call को तब तक अवरुद्ध नहीं किया जाना चाहिए जब तक कि आप Popen.wait को कॉल न करें, लेकिन मेरे लिए यह बाहरी एप्लिकेशन से बाहर निकलने तक अवरुद्ध हो रहा है। मैं यह कैसे तय करुं?पायथन subprocess.call अवरुद्ध

उत्तर

-1

subprocess में कोड वास्तव में बहुत सरल और पठनीय है। बस 3.3 या 2.7 संस्करण (उपयुक्त के रूप में) देखें और आप बता सकते हैं कि यह क्या कर रहा है।

उदाहरण के लिए, call इस तरह दिखता है:

def call(*popenargs, timeout=None, **kwargs): 
    """Run command with arguments. Wait for command to complete or 
    timeout, then return the returncode attribute. 

    The arguments are the same as for the Popen constructor. Example: 

    retcode = call(["ls", "-l"]) 
    """ 
    with Popen(*popenargs, **kwargs) as p: 
     try: 
      return p.wait(timeout=timeout) 
     except: 
      p.kill() 
      p.wait() 
      raise 

आप wait बुला बिना एक ही बात कर सकते हैं। Popen बनाएं, उस पर wait पर कॉल न करें, और यही वही है जो आप चाहते हैं।

+20

सहायक, लेकिन संवेदनात्मक। – dpitch40

5

आप दस्तावेज़ों को गलत पढ़ रहे हैं। उनके अनुसार:

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False) 

तर्कों द्वारा वर्णित आदेश चलाएं। आदेश को पूरा करने के लिए प्रतीक्षा करें, फिर वापसी कोड विशेषता दें।

+0

ओह, ठीक है। विकल्प P_NOWAIT के साथ os.spawnl को कॉल करने, कहने की कार्यक्षमता को मैं कैसे डुप्लिकेट करूं? – dpitch40

+1

@ dpitch40 - http://docs.python.org/2/library/subprocess.html#replacing-the-os-spawn-family। –

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