पायथन बाहर निकलने के आदेश - क्यों इतने सारे और कब प्रत्येक का उपयोग किया जाना चाहिए?


489

ऐसा लगता है कि स्क्रिप्ट के निष्पादन को रोकने के लिए अजगर कई अलग-अलग आदेशों का समर्थन करता है।
विकल्प हैं जो मैंने पाया है इस प्रकार हैं: quit(), exit(), sys.exit(),os._exit()

क्या मुझे कोई याद किया है? उनमें क्या अंतर है? आप प्रत्येक का उपयोग कब करेंगे?


1
आपने याद कियाos.abort()
द डेल्क्स

जवाबों:


764

मुझे उनके बारे में कुछ जानकारी दें:

  1. quit()बस SystemExitअपवाद को उठाता है।

    इसके अलावा, यदि आप इसे प्रिंट करते हैं, तो यह एक संदेश देगा:

    >>> print (quit)
    Use quit() or Ctrl-Z plus Return to exit
    >>>

    इस कार्यक्षमता को उन लोगों की मदद करने के लिए शामिल किया गया था जो पाइथन को नहीं जानते हैं। आखिरकार, एक नौसिखिया सबसे संभावित चीजों में से एक पायथन से बाहर निकलने की कोशिश करेगा quit

    फिर भी, उत्पादन कोड में उपयोग नहीं किया quitजाना चाहिए । यह इसलिए है क्योंकि यह केवल काम करता है अगर मॉड्यूल लोड किया गया है। इसके बजाय, इस फ़ंक्शन का उपयोग केवल दुभाषिया में किया जाना चाहिए।site

  2. exit()quit(या इसके विपरीत) के लिए एक उपनाम है । वे केवल पायथन को अधिक उपयोगकर्ता-अनुकूल बनाने के लिए एक साथ मौजूद हैं।

    इसके अलावा, यह भी एक संदेश देता है जब मुद्रित:

    >>> print (exit)
    Use exit() or Ctrl-Z plus Return to exit
    >>>

    हालांकि, जैसे quit, exitउत्पादन कोड में उपयोग करने के लिए बुरा माना जाता है और दुभाषिया में उपयोग के लिए आरक्षित होना चाहिए। ऐसा इसलिए है क्योंकि यह siteमॉड्यूल पर भी निर्भर करता है ।

  3. sys.exit()SystemExitअपवाद भी उठाता है। इसका मतलब है कि यह उस संबंध में जैसा है quitऔर वैसा ही है exit

    हालांकि उन दो के विपरीत, sys.exitउत्पादन कोड में उपयोग करने के लिए अच्छा माना जाता है। ऐसा इसलिए है क्योंकि sysमॉड्यूल हमेशा रहेगा।

  4. os._exit()सफाई संचालकों, निस्तब्धता stdio बफ़र, आदि को बुलाए बिना कार्यक्रम से बाहर निकलता है । इस प्रकार, यह बाहर निकलने के लिए एक मानक तरीका नहीं है और इसका उपयोग केवल विशेष मामलों में किया जाना चाहिए। इनमें से सबसे आम द्वारा बनाई गई बाल प्रक्रिया (तों) में है os.fork

    ध्यान दें कि, दी गई चार विधियों में, यह केवल वही करता है जो यह करता है।

सारांशित, सभी चार विधियाँ कार्यक्रम से बाहर निकलती हैं। हालांकि, पहले दो को उत्पादन कोड में उपयोग करने के लिए बुरा माना जाता है और अंतिम एक गैर-मानक, गंदा तरीका है जो केवल विशेष परिदृश्यों में उपयोग किया जाता है। इसलिए, यदि आप सामान्य रूप से किसी प्रोग्राम से बाहर निकलना चाहते हैं, तो तीसरी विधि के साथ जाएँ sys.exit:।


या, मेरी राय में और भी बेहतर, आप बस सीधे वही कर सकते हैं जो sys.exitपर्दे के पीछे चलता है और चलता है:

raise SystemExit

इस तरह, आपको sysपहले आयात करने की आवश्यकता नहीं है ।

हालांकि, यह पसंद स्टाइल पर बस एक है और विशुद्ध रूप से आप पर निर्भर है।


2
लेकिन ipython शेल में, quitऔर exitशेल sys.exitको नहीं छोड़ते हैं।
ली

5
sys.exit()बंद करने के लिए एक विश्वसनीय तरीका नहीं है। यदि इसे एक धागे के अंदर कहा जाता है, तो यह केवल उस धागे को समाप्त कर देगा जब तक कि यह मुख्य धागे में न हो। इससे बहुत सारे मामले हो सकते हैं जहां कार्यक्रम जारी रहता है क्योंकि कॉल मुख्य धागे में नहीं था, विशेष रूप से कुछ दुभाषियों द्वारा थ्रेड कॉल को आमंत्रित किया जाएगा।
इलियट

1
मैं एक endकमांड जोड़ने के लिए वोट करता हूं जो होगा raise SystemExit। यह मत देखिए कि मूल रूप में ऐसा कुछ सरल क्यों नहीं हो सकता है।
ब्रायन बर्न्स

6
@BrianBurns: यह समर्पित सिंटैक्स जोड़ने और किसी अन्य कीवर्ड को संग्रहीत करने के लायक नहीं है। यह printएक बयान से एक फ़ंक्शन में क्यों बदला गया था के समान है । सिंटैक्स जोड़ना आसान है, लेकिन ऐसा करने में एक जटिलता लागत है।
user2357112

1
क्या बुलाते समय कोष्ठक महत्वपूर्ण हैं sys.exit()?
lindhe

99

फ़ंक्शन * quit() , exit()और sys.exit()उसी तरह से कार्य करते हैं: वे SystemExitअपवाद को बढ़ाते हैं। तो वहाँ कोई वास्तविक अंतर, सिवाय इसके कि है sys.exit()हमेशा होता है उपलब्ध है, लेकिन exit()और quit()तभी उपलब्ध होता है कर रहे हैं siteमॉड्यूल आयात किया जाता है।

os._exit()समारोह खास है, यह किसी भी सफाई कार्यों बुला बिना तुरंत बाहर निकल जाता है (यह नहीं फ्लश बफ़र्स करता है, उदाहरण के लिए)। यह अत्यधिक विशिष्ट उपयोग के मामलों के लिए डिज़ाइन किया गया है ... मूल रूप से, केवल एक os.fork()कॉल के बाद बच्चे में ।

निष्कर्ष

  • का उपयोग करें exit()या quit()REPL में।

  • sys.exit()स्क्रिप्ट में उपयोग करें , या raise SystemExit()यदि आप पसंद करते हैं।

  • os._exit()कॉल करने के बाद बाहर निकलने के लिए बच्चे की प्रक्रियाओं के लिए उपयोग करें os.fork()

इन सभी को तर्कों के बिना बुलाया जा सकता है, या आप बाहर निकलने की स्थिति, उदाहरण के लिए, exit(1)या स्थिति से बाहर निकलने के लिए निर्दिष्ट कर सकते हैं। raise SystemExit(1)1. ध्यान दें कि पोर्टेबल प्रोग्राम 0-255 की सीमा में स्थिति कोड से बाहर निकलने तक सीमित हैं, यदि आप raise SystemExit(256)कई प्रणालियों पर यह करेंगे छंटनी हो और आपकी प्रक्रिया वास्तव में स्थिति 0 से बाहर निकल जाएगी।

फुटनोट

* वास्तव में, quit()और exit()कॉल करने योग्य उदाहरण ऑब्जेक्ट हैं, लेकिन मुझे लगता है कि उन्हें फ़ंक्शन कॉल करना ठीक है।


50

बाहर निकलने के विभिन्न साधन

os._exit():

  • क्लीन हैंडलर को बुलाए बिना प्रक्रिया से बाहर निकलें।

exit(0):

  • किसी भी त्रुटि / समस्याओं के बिना एक स्वच्छ निकास।

exit(1):

  • कुछ समस्या / त्रुटि / समस्या थी और यही कारण है कि कार्यक्रम से बाहर निकल रहा है।

sys.exit():

  • जब प्रणाली और अजगर नीचे बन्द हो जाता है; इसका मतलब है कि कार्यक्रम चलाने के बाद कम मेमोरी का उपयोग किया जा रहा है।

quit():

  • अजगर फ़ाइल को बंद कर देता है।

सारांश

मूल रूप से वे सभी एक ही काम करते हैं, हालांकि, यह इस बात पर भी निर्भर करता है कि आप इसके लिए क्या कर रहे हैं।

मैं तुम्हें कुछ भी बाहर छोड़ दिया नहीं लगता कि और मैं करने के लिए इस्तेमाल हो रही है की सिफारिश करेंगे quit()या exit()

आप उपयोग करेंगे sys.exit()और os._exit()मुख्य रूप से यदि आप बड़ी फ़ाइलों का उपयोग कर रहे हैं या टर्मिनल को नियंत्रित करने के लिए अजगर का उपयोग कर रहे हैं।

अन्यथा मुख्य रूप से उपयोग exit()या quit()


42

sys.exit बाहर निकलने के लिए विहित तरीका है।

आंतरिक रूप से sys.exitबस उठता है SystemExit। हालांकि, सीधे कॉल करने sys.exitकी तुलना में कॉलिंग अधिक मुहावरेदार है SystemExit

os.exit एक निम्न-स्तरीय प्रणाली कॉल है जो किसी भी सफाई हैंडलर को कॉल किए बिना सीधे बाहर निकल जाती है।

quitऔर exitकेवल पायथन प्रॉम्प्ट से एक आसान रास्ता प्रदान करने के लिए मौजूद है। यह नए उपयोगकर्ताओं या उपयोगकर्ताओं के लिए है जो गलती से पायथन प्रॉम्प्ट में प्रवेश कर चुके हैं, और सही सिंटैक्स जानना नहीं चाहते हैं। वे टाइपिंग की कोशिश करने की संभावना है exitया quit। हालांकि यह दुभाषिया से बाहर नहीं निकलेगा, यह कम से कम एक संदेश जारी करता है जो उन्हें बाहर का रास्ता बताता है:

>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
$

यह अनिवार्य रूप से सिर्फ एक हैक है जो इस तथ्य का उपयोग करता है कि दुभाषिया __repr__किसी भी अभिव्यक्ति के प्रिंट करता है जिसे आप प्रॉम्प्ट पर दर्ज करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.