दिलचस्प पोस्ट
पहचान करने के लिए jQuery प्राप्त करना .change () IE में मैं अजगर 2 और 3 को विंडोज 7 में कैसे चला सकता हूं? आर में फ्लोटिंग पॉइंट इश्यू? जावा – विश्वास के लिए पथस्टोर – सेट संपत्ति काम नहीं करता है? XML गुण बनाम तत्व awk / sed: एक रिकर्सिव कैसे खोज / एक स्ट्रिंग की जगह है? पूरक रंग की गणना करने के लिए जेएस फ़ंक्शन? कैसे विंडोज 7 में अजगर पथ को जोड़ने के लिए? आप SQL सर्वर 2005 डेटाबेस में सभी मौजूदा कनेक्शन कैसे मार सकते हैं? सर्वश्रेष्ठ जावा / स्विंग ब्राउज़र घटक? 64-बिट जेवीएम के साथ सबसे बड़ा संभव ढेर आकार क्या है? कैसे ठीक से बंद जावा निष्पादक सेवा लैम्ब्डा अभिव्यक्ति एआरए / कन्वर्ट करने के लिए स्ट्रिंग की सूची / सरणियों की सूची क्लोज़ बटन पर क्लिक करने के बजाय फॉर्म को छुपाएं Openmp को सक्षम करने में त्रुटि – "ld: -lgomp के लिए लाइब्रेरी नहीं मिली" और क्लैग त्रुटियाँ

अवरोधन और गैर अवरुद्ध उपप्रोसेस कॉल

मैं पूरी तरह से subprocess.call() , subprocess.Popen() , subprocess.check_call()subprocess.check_call() बीच भ्रमित हूं।

कौन अवरुद्ध है और कौन नहीं है?

मेरा क्या मतलब यह है कि क्या मैं subprocess.Popen() उपयोग करता हूं। subprocess.Popen() कि क्या मूल प्रक्रिया उसकी क्रियान्वयन पर रखने से पहले बाल प्रक्रिया return / exit प्रतीक्षा करता है या नहीं।

shell=True कैसे करता shell=True यह कॉल्स को प्रभावित करते हैं?

वेब के समाधान से एकत्रित समाधान "अवरोधन और गैर अवरुद्ध उपप्रोसेस कॉल"

Popen nonblocking है call और check_call अवरुद्ध कर रहे हैं। आप अपना wait या communicate पद्धति कॉल करके Popen इंस्टेंस ब्लॉक बना सकते हैं।

यदि आप सोर्स कोड में देखते हैं, तो आपको call कॉल Popen(...).wait() देखेंगे Popen(...).wait() , यही कारण है कि इसे अवरुद्ध कर रहा है check_call कॉल्स, यही वजह है कि इसे ब्लॉकों के रूप में भी जाना जाता है

सख्ती से बोल रहा हूँ, shell=True अवरुद्ध करने के मुद्दे पर ओर्थोगोनल है। हालांकि, shell=True पायथन को शेल निष्पादित करने के बाद और फिर शेल में कमांड चलाते हैं। अगर आप ब्लॉकिंग कॉल का उपयोग करते हैं, तो शेल समाप्त होने पर कॉल वापस आ जाएगी। चूंकि शेल कमांड को चलाने के लिए एक उप-प्रोसेस पैदा कर सकता है, इसलिए शैल उपप्रोसेस से पहले खत्म हो सकता है। उदाहरण के लिए,

 import subprocess import time proc = subprocess.Popen('ls -lRa /', shell=True) time.sleep(3) proc.terminate() proc.wait() 

यहां दो प्रक्रियाएं पैदा की जाती हैं: Popen एक शेल चलाने वाले उपप्रोसेन पैदा करता है। बदले में खोल एक उपप्रोसेस चल रहा ls proc.terminate() खोल को मारता है, लेकिन proc.terminate() चल रहा ls रहता है। (यह प्रचुर उत्पादन द्वारा प्रकट होता है, अजगर स्क्रिप्ट समाप्त हो जाने के बाद भी। pkill ls साथ ls को मारने के लिए तैयार रहें।)