পাইথন থেকে বেরিয়ে আসার আদেশ - কেন এতগুলি এবং কখন ব্যবহার করা উচিত?


489

দেখে মনে হচ্ছে পাইথন স্ক্রিপ্ট সম্পাদন বন্ধ করার জন্য বিভিন্ন কমান্ডকে সমর্থন করে।
পছন্দ আমি পেয়েছি আছেন: quit(), exit(), sys.exit(),os._exit()

আমি কি কিছু মিস করেছি? তাদের মধ্যে পার্থক্য কী? আপনি কখন ব্যবহার করবেন?


1
আপনি মিস করেছেনos.abort()
ডালিক্স

উত্তর:


763

তাদের সম্পর্কে কিছু তথ্য দিন:

  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()ক্লিনআপ হ্যান্ডলার, ফ্লাশিং স্টিডো বাফার, ইত্যাদি কল না করেই প্রোগ্রামটি প্রস্থান করে । সুতরাং, এটি প্রস্থান করার কোনও আদর্শ উপায় নয় এবং এটি কেবলমাত্র বিশেষ ক্ষেত্রে ব্যবহার করা উচিত। এর মধ্যে সর্বাধিক সাধারণ হ'ল শিশু প্রসেস (এস) এর তৈরি os.fork

    দ্রষ্টব্য, প্রদত্ত চারটি পদ্ধতির মধ্যে কেবল এটিই এটি অনন্য।

সংক্ষেপে, সমস্ত চারটি পদ্ধতি প্রোগ্রাম থেকে প্রস্থান করে। তবে, প্রথম দুটি উত্পাদন কোডে ব্যবহার করা খারাপ বলে বিবেচিত হয় এবং শেষটি একটি মানহীন, নোংরা উপায় যা কেবলমাত্র বিশেষ পরিস্থিতিতে ব্যবহৃত হয়। সুতরাং, যদি আপনি সাধারণত একটি প্রোগ্রাম থেকে প্রস্থান করতে চান, তৃতীয় পদ্ধতি সঙ্গে যান: sys.exit


অথবা, আমার মতে আরও ভাল, আপনি সরাসরি sys.exitপর্দার পিছনে যা করতে পারেন তা করতে পারেন এবং চালাতে পারেন:

raise SystemExit

এইভাবে, আপনাকে sysপ্রথমে আমদানি করার দরকার নেই ।

তবে এই পছন্দটি কেবল স্টাইলের মধ্যে একটি এবং খাঁটি আপনার উপর নির্ভর করে।


2
তবে আইপথন শেলটিতে quitএবং exitশেলটি ছাড়ার সময় sys.exitনা।
লি

5
sys.exit()বন্ধ করার কোনও নির্ভরযোগ্য উপায় নয়। যদি এটি কোনও থ্রেডের অভ্যন্তরে বলা হয় তবে এটি কেবল সেই থ্রেডটিকেই শেষ করে দিবে যদি না এটি মূল থ্রেডে থাকে। এটি প্রোগ্রামের অব্যাহতভাবে অনেক ক্ষেত্রে পরিচালিত করতে পারে কারণ কলটি মূল থ্রেডে ছিল না, বিশেষত কিছু দোভাষী যদি অদৃশ্যভাবে থ্রেড কল করে।
ইলিয়ট

1
আমি একটি endকমান্ড যুক্ত করার পক্ষে ভোট দেব যা চাইবে raise SystemExit। বেসিকের মতো কেন এমন কিছু সহজ হতে পারে না তা দেখুন না।
ব্রায়ান বার্নস

6
@ ব্রায়ান বার্নস: এটি ডেডিকেটেড সিনট্যাক্স যুক্ত করা এবং অন্য কীওয়ার্ড সংরক্ষণের পক্ষে উপযুক্ত নয়। এটি printবিবৃতি থেকে কোনও ফাংশনে কেন পরিবর্তন করা হয়েছিল তার সমান । সিনট্যাক্স যুক্ত করা সহজ, তবে এটি করার ক্ষেত্রে জটিলতার ব্যয় রয়েছে।
ব্যবহারকারী 2357112

1
কল করার সময় প্রথম বন্ধনী কী গুরুত্বপূর্ণ sys.exit()?
lindhe

98

ফাংশন * quit() , exit()এবং sys.exit()একই ভাবে ফাংশন: তারা বাড়াতে SystemExitব্যতিক্রম। তাই সেখানে কোনো সত্যিকারের পার্থক্য হল ছাড়া sys.exit()সর্বদা প্রাপ্তিসাধ্য কিন্তু exit()এবং quit()শুধুমাত্র উপলব্ধ হলে হয় siteমডিউল আমদানি করা হয়।

os._exit()ফাংশন বিশেষ, এটি কোনো পরিষ্করণ ফাংশন কলিং ছাড়া অবিলম্বে প্রস্থান করে (এটা না ফ্লাশ বাফার করে, উদাহরণস্বরূপ)। এটি অত্যন্ত বিশেষায়িত ব্যবহারের ক্ষেত্রে ডিজাইন করা হয়েছে ... মূলত, শুধুমাত্র os.fork()কল করার পরে সন্তানের মধ্যে ।

উপসংহার

  • REPL exit()বা ব্যবহার করুন quit()

  • sys.exit()স্ক্রিপ্টগুলিতে ব্যবহার করুন বা raise SystemExit()আপনি যদি পছন্দ করেন।

  • os._exit()কল করার পরে সন্তানের প্রক্রিয়াগুলি প্রস্থান করার জন্য ব্যবহার করুন os.fork()

এগুলি সমস্তকে তর্ক ছাড়াই কল করা যেতে পারে, বা আপনি প্রস্থান স্থিতি উল্লেখ করতে পারেন, উদাহরণস্বরূপ, exit(1)বা raise SystemExit(1)স্থিতি দিয়ে প্রস্থান করার জন্য 1.. দ্রষ্টব্য যে পোর্টেবল প্রোগ্রামগুলি 0-255 রেঞ্জের মধ্যে স্থিতি কোডগুলি প্রস্থান করার মধ্যে সীমাবদ্ধ রয়েছে, আপনি যদি raise SystemExit(256)অনেক সিস্টেমে এটি করেন তবে ছিন্ন হয়ে যান এবং আপনার প্রক্রিয়াটি আসলে স্থিতি 0 দিয়ে প্রস্থান করবে।

পাদটিকা

* আসলে, quit()এবং exit()কলযোগ্য উদাহরণ বস্তু, তবে আমি তাদের ফাংশন বলা ঠিক আছে বলে মনে করি।


51

বের হওয়ার বিভিন্ন উপায়

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__করে প্রম্পটে আপনার প্রবেশ করা কোনও অভিব্যক্তিটির দোভাষী মুদ্রণ করে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.