दिलचस्प पोस्ट
एएसपी.नेट वेबसाइट में वीबीएसपीटी से एक वैरिएबल का उपयोग करना UINavigationBar में बटन कैसे जोड़ें? स्ट्रिंग में यूआरएल को जोड़ने के लिए सी # कोड आईओएस / एंड्रॉइड क्रॉस प्लेटफॉर्म विकास RootViewController एनीमेशन संक्रमण, प्रारंभिक ओरिएंटेशन गलत है कैसे प्रोग्रामिंग आईफोन पर एसएमएस भेजें? स्कैनर बनाम स्ट्रिंगटोकनाइज़र बनाम स्ट्रिंग। स्प्लिट कोणीय जेएस और गूगल एपीआई client.js (गैपसी) एक्सप्लोरर की तरह फ़ोल्डर ब्राउज़र नियंत्रण कैसे बनाएं? मैं खुद की एक शाखा के लिए एक unmerged पुल का अनुरोध कैसे ला सकता हूं? C # में डेलमेन के बराबर (WinAPI) .NET एप से Google के वी 8 इंजन को संदर्भित करना एचटीएमएल बॉडी के साथ मेल टू Xcode 5 त्रुटि CertUIFramework.axbundle एसएसई के साथ कुशल 4×4 मैट्रिक्स वेक्टर गुणन: क्षैतिज जोड़ और डॉट उत्पाद – क्या बात है?

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

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

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

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

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

Solutions Collecting From Web of "अवरोधन और गैर अवरुद्ध उपप्रोसेस कॉल"

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 को मारने के लिए तैयार रहें।)