जवाबों:
आप स्क्रिप्ट में जो देख रहे हैं वह कॉल है sys.exit()
। एग्जिट कोड के रूप में उस विधि का तर्क पर्यावरण में वापस आ जाता है।
यह काफी संभावना है कि स्क्रिप्ट कभी भी निकास विधि नहीं कह रही है, और यह 0 डिफ़ॉल्ट निकास कोड है।
वैकल्पिक तर्क arg बाहर निकलने की स्थिति (शून्य में डिफ़ॉल्ट), या किसी अन्य प्रकार की वस्तु देने वाला पूर्णांक हो सकता है। यदि यह पूर्णांक है, तो शून्य को "सफल समाप्ति" माना जाता है और किसी भी गैर-अक्षीय मान को शेल और इस तरह "असामान्य समाप्ति" माना जाता है। अधिकांश प्रणालियों को इसे 0-127 की सीमा में होना चाहिए, और अन्यथा अपरिभाषित परिणाम उत्पन्न करना चाहिए। कुछ प्रणालियों में विशिष्ट निकास कोड के लिए विशिष्ट अर्थ निर्दिष्ट करने के लिए एक सम्मेलन होता है, लेकिन ये आमतौर पर अविकसित होते हैं; यूनिक्स प्रोग्राम आम तौर पर कमांड लाइन सिंटैक्स त्रुटियों के लिए 2 और अन्य सभी प्रकार की त्रुटियों के लिए 1 का उपयोग करते हैं।
एक उदाहरण जहां निकास कोड का उपयोग किया जाता है वे शेल स्क्रिप्ट में होते हैं। बैश में आप $?
अंतिम निकास स्थिति के लिए विशेष चर की जांच कर सकते हैं :
me@mini:~$ python -c ""; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(0)"; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(43)"; echo $?
43
व्यक्तिगत रूप से मैं /usr/include/asm-generic/errno.h
(लिनक्स सिस्टम पर) में मिलने वाले निकास कोड का उपयोग करने की कोशिश करता हूं , लेकिन मुझे नहीं पता कि क्या यह करना सही है।
grep
बाहर निकलकर इस प्रवृत्ति को तोड़ती है । बहुत बहुत धन्यवाद, स्टैलमैन। 1
2
रिकॉर्ड के लिए, आप यहां परिभाषित POSIX मानक निकास कोड का उपयोग कर सकते हैं ।
उदाहरण:
import sys, os
try:
config()
except:
sys.exit(os.EX_CONFIG)
try:
do_stuff()
except:
sys.exit(os.EX_SOFTWARE)
sys.exit(os.EX_OK) # code 0, all ok
exitstatus
PyPI पैकेज देखें।
एक errno
मॉड्यूल है जो मानक निकास कोड को परिभाषित करता है:
उदाहरण के लिए, अनुमति से इनकार किया गया त्रुटि कोड 13 है :
import errno, sys
if can_access_resource():
do_something()
else:
sys.exit(errno.EACCES)
errno
और ग़लती के अनुसार ) है, लेकिन 77 का निकास स्थिति कोड ( os
और sysexits.h के अनुसार ) है। पूर्व में उत्सर्जन करने वाले कार्यक्रम गैर-मानक ( डी वल्को वेल जुरे ) हैं और दूसरों के साथ अच्छी तरह से नहीं खेलेंगे जो उत्तरार्द्ध की सही उम्मीद करते हैं।
जवाब है "यह निर्भर करता है कि बाहर निकलने का कोड शून्य का मतलब क्या है"
हालांकि, ज्यादातर मामलों में, इसका मतलब है "सब कुछ ठीक है"
मुझे POSIX पसंद है:
इसलिए, शेल पर, मैं टाइप करूंगा:
python script.py && echo 'OK' || echo 'Not OK'
अगर मेरी अजगर स्क्रिप्ट sys.exit(0)
शेल को 'ओके' कहती है
अगर मेरी पाइथन स्क्रिप्ट कॉल sys.exit(1)
(या कोई भी गैर-शून्य पूर्णांक), शेल 'ठीक नहीं है'
शेल के साथ चतुर होना आपका काम है, और आपकी स्क्रिप्ट के लिए प्रलेखन (या स्रोत) को पढ़ने के लिए यह देखना है कि निकास कोड का क्या मतलब है।
ऑपरेटिंग सिस्टम कमांड में एक्जिट कोड होते हैं। इस पर कुछ सामग्री देखने के लिए लिनक्स एक्ज़िट कोड देखें। शेल यह तय करने के लिए एक्ज़िट कोड का उपयोग करता है कि क्या प्रोग्राम ने काम किया है, समस्याएँ हैं, या असफल। मानक (या कम से कम आमतौर पर उपयोग किए जाने वाले) निकास कोड बनाने के लिए कुछ प्रयास हैं। यह उन्नत शैल स्क्रिप्ट पोस्टिंग देखें ।
मैं sys.exit () का उपयोग करने के बजाय निकास (0) बिल्टिन के साथ एक साफ शटडाउन की सिफारिश करता हूं
मुझे यकीन नहीं है कि यह अच्छी सलाह है।
उल्लेख किया गया बहुत ही दस्तावेज़ीकरण पढ़ता है:
साइट मॉड्यूल (जो स्टार्टअप के दौरान स्वचालित रूप से आयात किया जाता है, भले ही -S कमांड-लाइन विकल्प दिया गया हो) बिल्ट-इन नेमस्पेस में कई स्थिरांक जोड़ता है। वे इंटरएक्टिव इंटरप्रेटर शेल के लिए उपयोगी हैं और कार्यक्रमों में उपयोग नहीं किया जाना चाहिए ।
फिर:
निकास (कोड = कोई नहीं)
मुद्रित होने पर, "बाहर निकलने के लिए उपयोग करें () या Ctrl-D (यानी EOF)" जैसे संदेश प्रिंट करें, और जब कॉल किया जाता है, तो निर्दिष्ट निकास कोड के साथ SystemExit बढ़ाएं।
यदि हम इसकी तुलना sys.exit () प्रलेखन से करते हैं, तो यह उसी तंत्र का उपयोग कर रहा है जो SystemExit
अपवाद को उठा रहा है।
यदि आप मानक POSIX निकास कोड का उपयोग करना चाहते हैं, तो exitstatus
PyPI पर पैकेज देखें ।
पैकेज स्थापित करें:
$ pip install exitstatus
अपने कोड में उपयोग करें:
import sys
from exitstatus import ExitStatus
sys.exit(ExitStatus.success)
एक्ज़िट कोड का अर्थ केवल स्क्रिप्ट लेखक द्वारा निर्दिष्ट किया गया है। यूनिक्स परंपरा यह है कि निकास कोड 0 का मतलब 'सफलता' है, और कुछ भी विफलता नहीं है। यह सुनिश्चित करने का एकमात्र तरीका है कि किसी दिए गए स्क्रिप्ट के लिए एक्ज़िट कोड का मतलब स्क्रिप्ट की जांच करना है।
अपवाद हैंडलर और अन्य चीजों को निष्पादित करने की अनुमति देने के लिए, मैं exit(0)
उपयोग करने के बजाय बिलिन के साथ एक स्वच्छ शटडाउन की सिफारिश करता हूं, sys.exit()
जो प्रक्रिया को अचानक समाप्त करता है।
SystemExit
किसी भी तरह से बढ़ा हुआ प्रतीत होता है।
os._exit
, दोनों को लगता है SystemExit
।
sys.exit()
करता हैexit()
। वे दोनों एक ही काम करते हैं: एक SystemExit
अपवाद बढ़ाएं । दरअसल, exit()
इंटरएक्टिव सत्रों के लिए होता है, लिपियों के लिए नहीं, इसलिए वैचारिक रूप sys.exit()
से संकेत दिया जाता है। आप के साथ भ्रमित हो सकता है os._exit()
, यह एक है कि अचानक समाप्त होता है।