পাইথনে কোডগুলি প্রস্থান করুন


207

আমি একটি বার্তা পেয়েছিলাম script xyz.py returned exit code 0। এটার মানে কি?

পাইথনের প্রস্থান কোডগুলির অর্থ কী? সেখানে কত সংখ্যক? কোনটি গুরুত্বপূর্ণ?


1
আপনি এই বার্তাটি কোথায় দেখছেন?
জেরেমি কেন্ট্রেল

1
@ জেরেমি পাইথনউইনের নীচে।
সূর্যদীপ

উত্তর:


223

আপনি স্ক্রিপ্টে যা খুঁজছেন তা হ'ল কল sys.exit()। এই পদ্ধতির যুক্তিটি প্রস্থান কোড হিসাবে পরিবেশে ফিরে আসে।

এটি সম্ভবত সম্ভবত স্ক্রিপ্টটি প্রস্থান পদ্ধতিটিকে কল করবে না এবং এটি 0 টি ডিফল্ট প্রস্থান কোড।


12
মোটেও নিশ্চিত নয় ইউনিক্স / লিনাক্সে, মানটি হ'ল: সবকিছু ঠিক থাকলে ক্ষেত্রে 0 থেকে প্রস্থান করুন। একটি কমান্ড টাইপ করুন, তারপরে cho? প্রতিধ্বনি করুন: আপনি যদি 0 পড়েন তবে এটি কোনও ত্রুটি ছাড়াই ফিরে আসবে। ধারণা স্ট্যান্ডার্ড পরীক্ষা করা হয়। Xyz.py কোডটি যদি কোনও ত্রুটির মুখোমুখি না হয়, তবে এটি 0 এ ফিরে আসতে হবে!
ব্রুনো ভন প্যারিস

1
আপনি যদি প্রস্থান কোডটি পরিবর্তন করতে চান, প্রস্থান
বিল্টিন

101

এর জন্য ডকুমেন্টেশন থেকেsys.exit :

Argumentচ্ছিক আর্গুমেন্টটি আর্গুমেন্টটি প্রস্থান স্থিতি (শূন্যকে ডিফল্ট করা) বা অন্য ধরণের অবজেক্ট প্রদান করতে পারে ger যদি এটি একটি পূর্ণসংখ্যা হয় তবে শূন্যটিকে "সফল সমাপ্তি" হিসাবে বিবেচনা করা হয় এবং কোনও ননজারো মান শাঁস এবং এর মতো দ্বারা "অস্বাভাবিক সমাপ্তি" হিসাবে বিবেচিত হয়। বেশিরভাগ সিস্টেমে এটি 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(লিনাক্স সিস্টেমে) আমি খুঁজে পাওয়া প্রস্থান কোডগুলি ব্যবহার করার চেষ্টা করি , তবে আমি জানি না এটি করা ঠিক কি না।


3
অন্য একটি পোস্ট থেকে আমি এই লিঙ্কটি পেয়েছি: tldp.org/LDP/abs/html/exitcodes.html ব্যবহারযোগ্য হতে পারে। :)
আইগির

9
errno.h সাধারণত ফাংশন কল প্রস্থান কোডগুলির জন্য। প্রোগ্রামের প্রস্থান কোডকে মানীকরণের প্রচেষ্টাগুলির ফলে বেশিরভাগ পসিক্স সিস্টেমে /usr/incolve/sysexits.h উপস্থিত থাকে।
এমপিউসেট

1
এটা জেনে রাখা খুব ভাল যে "ইউনিক্স প্রোগ্রামগুলি সাধারণত কমান্ড লাইন সিনট্যাক্স ত্রুটির জন্য 2 ব্যবহার করে"!
ড্যান্টিস্টন

2
@dantiston একমত। উল-রঙ্গিন-ইন-উল-জেন্টু অ্যাডভোকেট, তবুও আমি কখনই জানতাম না ... এই নির্দোষ দিন পর্যন্ত। ( আমার লজ্জা এখনই শেষ হয়। ) সম্পর্কিত, নোট করুন যখন কোন লাইনের সাথে মেলে না এবং প্রকৃত ত্রুটিগুলি প্রকাশ করে grepএই প্রবণতাটি ভাঙ্গবে তা নোট করুন। অনেক ধন্যবাদ, স্টলম্যান। 12
সিসিল কারি

32

রেকর্ডের জন্য, আপনি এখানে সংজ্ঞায়িত 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

3
ডক্স অনুসারে এগুলি কেবল ইউনিক্স অপারেটিং সিস্টেমে উপলব্ধ তাই এটি সম্পূর্ণরূপে বহনযোগ্য নয়।
ফিনিক্স

1
আপনি যদি পোর্টেবল পসিক্স কোডগুলি চান যা সমস্ত অপারেটিং সিস্টেমে উপলব্ধ থাকে তবে exitstatusপাইপিআই প্যাকেজটি দেখুন।
ফিনিক্স

1
সেই প্যাকেজের পুরোতা সাফল্যের জন্য 0 এবং ব্যর্থতার জন্য 1।
পাভেল মিনায়েভ

25

একটি errnoমডিউল রয়েছে যা স্ট্যান্ডার্ড প্রস্থান কোডগুলি সংজ্ঞায়িত করে:

উদাহরণস্বরূপ, অনুমতি অস্বীকার করা হয়েছে ত্রুটি কোড 13 :

import errno, sys

if can_access_resource():
    do_something()
else:
    sys.exit(errno.EACCES)

36
এটি ভুল। এই ভুলগুলি প্রক্রিয়া প্রস্থান কোড হিসাবে ব্যবহার করার উদ্দেশ্যে নয়। এগুলি নিম্ন স্তরের ত্রুটি কোডগুলি যা প্রোগ্রামগুলিতে অভ্যন্তরীণভাবে ব্যবহৃত হয়, বিশেষত সি ভাষায় লিখিত written পাইথনের ক্ষেত্রে, যখনই সম্ভব ব্যতিক্রমগুলি ব্যবহার করুন।
এসভিডিবি

2
তুমি ঠিক বলছো. এগুলি অভ্যন্তরীণভাবে ব্যবহার করতে হবে। তবে আপনি সাধারণত ব্যবহারকারী পর্যায়ে ব্যতিক্রম উত্থাপন করেন না। আপনি নির্বিচারে চয়ন করেন পূর্ণসংখ্যা হিসাবে আপনি sys.exit (x) ব্যবহার করেন। তবে আপনি EX_ এর সাথে শুরু করা এবং 'ওএস' মডিউলটিতে সংজ্ঞায়িত যারা ব্যবহার করতে পারেন। ভালো লেগেছে os.EX_OK বা os.EX_IOERR
অলি

2
দুঃখিত, তবে আমি এটিকেও কম ভোট দিচ্ছি কারণ এটি বিভ্রান্তিকর। থেকে প্রস্থান করুন অবস্থা কোড এবং ত্রুটি সংখ্যা না বিনিময়যোগ্য / পরিপূরক। প্রদত্ত উদাহরণটি ব্যবহার করে, "অনুমতি প্রত্যাখ্যান করা হয়েছে" এর একটি ত্রুটি কোড রয়েছে 13 ( তবে errnoএবং errno.h অনুসারে ), তবে একটি প্রস্থান স্থিতি কোড 77 77 (অনুসারে osএবং sysexits.h অনুযায়ী )। পূর্ববর্তীটি যে প্রোগ্রামগুলিকে নির্গত করে সেগুলি অ-মানক ( ডি ফ্যাক্টো ওয়াল জুর ) এবং সঠিকভাবে প্রত্যাশা করা অন্যদের সাথে সুন্দরভাবে খেলবে না।
মার্ক জি।

14

0 এর প্রস্থান কোডগুলির অর্থ সাধারণত "এখানে কোনও ভুল নেই।" তবে স্ক্রিপ্টের প্রোগ্রামার যদি কনভেনশন অনুসরণ না করে তবে এর অর্থ কী তা বোঝার জন্য আপনাকে উত্সের সাথে পরামর্শ করতে হতে পারে। সাধারণত একটি শূন্য-মান একটি ত্রুটি কোড হিসাবে ফিরে আসে।


6

উত্তরটি "প্রস্থান কোড শূন্যের অর্থ কী তার উপর নির্ভর করে"

তবে বেশিরভাগ ক্ষেত্রে এর অর্থ "সবকিছু ঠিক আছে"


আমি পসিক্স পছন্দ করি:

সুতরাং, শেলের উপর, আমি টাইপ করব:

python script.py && echo 'OK' || echo 'Not OK'

যদি আমার অজগর স্ক্রিপ্টটি sys.exit(0)শেলটি কল করে তবে 'ঠিক আছে'

যদি আমার অজগর স্ক্রিপ্ট কল করে sys.exit(1)(বা কোনও শূন্য নয় এমন পূর্ণসংখ্যা), শেলটি 'ঠিক আছে না' ফেরত দেয়

শেলটি দিয়ে চালাক হওয়া আপনার প্রস্থান এবং প্রস্থান কোডগুলি কী বোঝায় তা দেখতে আপনার স্ক্রিপ্টের জন্য ডকুমেন্টেশন (বা উত্স) পড়ুন।


কেবলমাত্র সম্পূর্ণতার জন্য, পাইথন স্ক্রিপ্টে ত্রুটি উত্থাপিত হয়েছে বা সিনট্যাক্স ত্রুটি থাকলে 'নট ঠিক নেই' মুদ্রণ করা হবে।
শীতল শাহ

5

অপারেটিং সিস্টেম কমান্ডের প্রস্থান কোড রয়েছে। এতে কিছু উপাদান দেখতে লিনাক্সের প্রস্থান কোডগুলি সন্ধান করুন। প্রোগ্রামটি কাজ করেছে, সমস্যা আছে বা ব্যর্থ হয়েছে কিনা তা নির্ধারণের জন্য শেলটি প্রস্থান কোডগুলি ব্যবহার করে। স্ট্যান্ডার্ড (বা কমপক্ষে সাধারণভাবে ব্যবহৃত) প্রস্থান কোডগুলি তৈরি করার জন্য কিছু প্রচেষ্টা রয়েছে। এই উন্নত শেল স্ক্রিপ্ট পোস্টিং দেখুন See


5

আমি sys.exit () ব্যবহার না করে প্রস্থান (0) অন্তর্নির্মিত একটি পরিষ্কার শাটডাউন করার পরামর্শ দিচ্ছি

আমি নিশ্চিত না এটি ভাল পরামর্শ কিনা।

উল্লিখিত খুব নথিপত্রগুলি :

সাইট মডিউল (যা প্রারম্ভকালে স্বয়ংক্রিয়ভাবে আমদানি করা হয়, -S কমান্ড-লাইন বিকল্পটি দেওয়া ব্যতীত) অন্তর্নির্মিত নেমস্পেসে বেশ কয়েকটি ধ্রুবক যুক্ত করে। এগুলি ইন্টারেক্টিভ ইন্টারপ্রেটার শেলের জন্য কার্যকর এবং প্রোগ্রামগুলিতে ব্যবহার করা উচিত নয়

তারপর:

প্রস্থান (কোড = কোনটি)

যে বিষয়গুলি মুদ্রিত করা হয়, তখন প্রস্থান করার জন্য "ব্যবহার ছেড়ে দিন") বা Ctrl-D (অর্থাত্ EOF) এর মতো একটি বার্তা মুদ্রণ করুন এবং যখন ডাকা হয় তখন নির্দিষ্ট প্রস্থান কোডের সাহায্যে SystemExit বাড়ান।

যদি আমরা এটিকে sys.exit () ডকুমেন্টেশনের সাথে তুলনা করি তবে এটি একই পদ্ধতি ব্যবহার করছে যা SystemExitব্যতিক্রম বাড়িয়ে তুলছে


5

আপনি যদি বহনযোগ্যভাবে স্ট্যান্ডার্ড POSIX প্রস্থান কোড ব্যবহার করতে চান তবে পাইপিআই- exitstatusতে প্যাকেজটি দেখুন ।

প্যাকেজ ইনস্টল করুন:

$ pip install exitstatus

আপনার কোড ব্যবহার করুন:

import sys
from exitstatus import ExitStatus

sys.exit(ExitStatus.success)

4

স্ক্রিপ্ট লেখকের দ্বারা নির্ধারিত প্রস্থান কোডগুলির কেবলমাত্র অর্থ রয়েছে। ইউনিক্স traditionতিহ্য হ'ল প্রস্থান কোড 0 এর অর্থ 'সাফল্য', অন্য কোনও কিছুই ব্যর্থতা। প্রদত্ত স্ক্রিপ্টের প্রস্থান কোডগুলির অর্থ কী তা নিশ্চিত হওয়ার একমাত্র উপায় হ'ল স্ক্রিপ্টটি নিজেই পরীক্ষা করা।


2

অনেক প্রোগ্রামিং ভাষায় প্রস্থান কোডগুলি প্রোগ্রামারগুলিতে। সুতরাং আপনি আপনার প্রোগ্রাম উত্স কোড (বা ম্যানুয়াল) তাকান আছে। জিরোর অর্থ সাধারণত "সবকিছু ঠিকঠাক হয়ে গেছে"।


-2

ব্যতিক্রম হ্যান্ডলারগুলি এবং অন্যান্য জিনিসগুলি কার্যকর করার অনুমতি দেওয়ার জন্য আমি exit(0)বিল্টিনের সাথে ক্লিন শাটডাউনটি ব্যবহার না করে সুপারিশ করছি sys.exit()যা হঠাৎ প্রক্রিয়াটি বন্ধ করে দেয়।


তাহলে কি পার্থক্য? কোথা থেকে এই তথ্য আসে? আপনি কি "অ্যাজিটেট" হ্যান্ডলারের মৃত্যুদন্ড বোঝাতে চাইছেন বা আপনি ঠিক কী উল্লেখ করছেন? SystemExitউভয় উপায়ে উত্থিত প্রদর্শিত হবে।
0xC0000022L

মিমি, আমি এটি দিয়ে বিভ্রান্ত os._exit, উভয় উত্থাপন বলে মনে হচ্ছে SystemExit
vidstige

1
ভুল: শুদ্ধভাবে শটডাউন করে, ঠিক তেমন sys.exit() করেexit() । তারা উভয়ই একই কাজ করে: একটি SystemExitব্যতিক্রম বাড়াতে । আসলে, exit()ইন্টারেক্টিভ সেশন, না স্ক্রিপ্ট জন্য বোঝানো হয়, তাই ধারণার দিক sys.exit() হল নির্দেশিত অন্যতম। আপনার সাথে বিভ্রান্তি হতে পারে os._exit(), এটি হ'ল আকস্মিকভাবে শেষ হয়।
MestreLion
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.