লিনাক্সে পাইথন কেন #! / Usr / bin / পাইথন রেখার প্রয়োজন?


50

খুব সহজ প্রশ্ন: লিনাক্সে পাইথনকে কেন লাইনের প্রয়োজন হয়

#!/usr/bin/python

অজগর ফাইলের শুরুতে, যেহেতু উইন্ডোজ নেই?

এটার কাজ কি? 'পাইথনের লিঙ্কগুলি' বর্ণনার কারণটি কিছুটা অস্পষ্ট ...


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

9
ঘরের হাতিটি হ'ল অজগর 2 এবং 3 এর সাথে সামঞ্জস্য না করা আপনার / ইউএসআর / বিন / পাইথন কখনও ব্যবহার করা উচিত নয় কারণ: খিলানটি একে পিথন 3-এর সাথে সিম্বলিংক করে, পিএসএফ স্বীকৃত যারা এই পদক্ষেপটি নিজেরাই প্রস্তাব দেয়।
তবুও অন্য একজন ব্যবহারকারী

5
এটি নিহিত রয়েছে, তবে নীচের উত্তরে এটির প্রয়োজন নেই বলে পরিষ্কারভাবে বলা হয়নি । আপনি কেবল ts নিজস্ব নাম থেকে স্ক্রিপ্টটি সম্পাদন করতে চান তবে এটি প্রয়োজন। আপনি সর্বদা python myscript.pyপরিবর্তে চালাতে পারেন ।
ক্রিস এইচ

3
@ চার্লসগ্রিন আমরা উইন্ডোজগুলি কেন তা জানতে পারে তা অনুধাবন করি না ;-) এটি এতটা আপ।
রিঞ্জউইন্ড

2
@ ইয়িটনথর ইউজার পাইথন 3 প্রকাশের ছয় বছর এবং এগারো মাস কেটে গেছে, এই মুহুর্তে আমি মনে করি লোকেরা 3 এর চেয়ে বেশি ডিফল্ট হওয়ার চেয়ে আরও ভাল হবে এবং যখন প্রয়োজন তখন 2 টি স্পষ্টভাবে উল্লেখ করবে spec
জ্যাব

উত্তর:


58

পাইথনের লিনাক্সে তেমন কোনও বিশেষ প্রয়োজন নেই। এটি ইউনিক্স / লিনাক্সের প্রোগ্রাম লোডার যা "শেবাং" লাইনটি কল করে, এটি ব্যবহার করে। এটি আসলে সীমাবদ্ধতার পরিবর্তে একটি বৈশিষ্ট্য, তবে আমরা এটি মুহূর্তের মধ্যে পেয়ে যাব। "শেবাং" -র উইকি পৃষ্ঠায় আরও বিশদ রয়েছে তবে আমি উইন্ডোজটির সাথে এখানে একটি তুলনা করার পাশাপাশি একটি ওভারভিউ দেওয়ার চেষ্টা করব।

প্রথমে উইন্ডোজের পরিস্থিতিটি দেখুন:

  • আপনি যখন কোনও ফাইল খোলার বা চালানোর চেষ্টা করেন, উইন্ডোজ প্রথমে সেই ফাইলটির প্রসারণ পরীক্ষা করে । এই গত ফাইলের নাম দিয়ে শুরু অংশ .পাইথন ফাইলের ক্ষেত্রে, এটি বিশেষভাবে হয় .py
  • উইন্ডোজ ফাইল এক্সটেনশনের ভিত্তিতে কী পদক্ষেপ নেবে তা সন্ধান করে।
    • এই তথ্যটি উইন্ডোজ রেজিস্ট্রিতে রেকর্ড করা আছে; পাইথন ইনস্টল হওয়ার পরে এটি উইন্ডোজকে সাধারণত জানায় যে .pyনতুন ইনস্টল করা অ্যাপ্লিকেশন পাইথন (অর্থ্যাৎ পাইথন ইন্টারপ্রেটার) ব্যবহার করে ফাইলগুলি খুলতে হবে ।
    • বেশ কয়েকটি ফাইল-ধরণের অভ্যন্তরীণ আচরণ রয়েছে; উদাহরণস্বরূপ, এক্সিকিউটেবল ফাইলগুলি (যেমন পাইথন ইন্টারপ্রেটার নিজেই) অবশ্যই শেষ হওয়া উচিত .exeএবং .batফাইলগুলি উইন্ডোজ ব্যাচ-স্ক্রিপ্ট হিসাবে কার্যকর করা হয়।
    • একটি নির্দিষ্ট ফাইল-টাইপের জন্য নেওয়া পদক্ষেপটি অনুকূলিতযোগ্য । উদাহরণস্বরূপ, আপনি উইন্ডোজকে বলতে পারেন যে .pyফাইলগুলি ব্যবহারের পরিবর্তে python.exeএটি অন্য কিছু প্রোগ্রামের সাথে টেক্সট সম্পাদক হিসাবে খোলার উচিত notepad.exe
      • এই ক্ষেত্রে, পাইথন স্ক্রিপ্টটি চালানোর জন্য আপনাকে ম্যানুয়ালি কল করতে হবে python <scriptname>.py(বা .batএটি করার জন্য একটি ফাইল লিখুন )।

এখন, পাইথন স্ক্রিপ্টের শীর্ষে একটি শেবাং লাইন ( #!/usr/bin/pythonবা #!/usr/bin/env python) থাকলে কী হবে ? ঠিক আছে, যেহেতু #পাইথনের একটি মন্তব্য লাইন তাই পাইথন দোভাষী কেবল এটিকে উপেক্ষা করবেন। ইউনিক্স / লিনাক্স ওয়ার্ল্ডে ব্যবহৃত বেশিরভাগ স্ক্রিপ্টিং ভাষাগুলি #মন্তব্য লাইনগুলি শুরু করার জন্য এটি এক কারণ ।

সুতরাং এটি উইন্ডোজের #!লাইনটির "দরকার নেই" বলতে কিছুটা বিভ্রান্তিকর ; উইন্ডোজ না দেখতে#! লাইন, এবং আসলে ফাইল এক্সটেনশন উপর নির্ভর কি করতে এটা বলতে। এর কয়েকটি অসুবিধা রয়েছে:

  • পাইথন স্ক্রিপ্টগুলি স্বয়ংক্রিয়ভাবে এরূপে স্বীকৃত হওয়ার জন্য আপনাকে শেষে অবশ্যই নামকরণ করতে হবে.py
  • পাইথন 3 স্ক্রিপ্ট থেকে পাইথন 2 স্ক্রিপ্ট আলাদা করার সহজ উপায় নেই way
  • পূর্বে উল্লিখিত হিসাবে, আপনি যদি .pyফাইল-টাইপের জন্য ডিফল্ট প্রবর্তন আচরণটি পরিবর্তন করেন , উইন্ডোজ আর পাইথনের সাহায্যে স্বয়ংক্রিয়ভাবে সেই স্ক্রিপ্টগুলি চালিত করতে পারে না। নোট করুন যে এটি অজান্তেই করা যেতে পারে।

এখন, ইউনিক্স / লিনাক্স স্ক্রিপ্টগুলি কীভাবে চালু করে তা দেখুন:

প্রথমে লক্ষ্য করার বিষয়টি হ'ল ইউনিক্স / লিনাক্স, উইন্ডোজের বিপরীতে, পাইথন স্ক্রিপ্টগুলি কোনও নির্দিষ্ট প্রোগ্রাম ব্যবহার করে, অন্তত ধারণামূলকভাবে "খোলার" চেষ্টা করছে না; ওএস জানে যে স্ক্রিপ্টটি এমন কিছু যা "এক্সিকিউট বিট" (যা এই উত্তরের ক্ষেত্রের বাইরে) নামে পরিচিত বলেই কার্যকর করা যায়। সুতরাং, যদি আপনি দুর্ঘটনাকৃতির #!/usr/bin/pthonপরিবর্তে টাইপ করেন তবে আপনি #!/usr/bin/pythonএকটি ত্রুটি বার্তা পাবেন যাতে এই পাঠ্যটি অন্তর্ভুক্ত রয়েছে:

/usr/bin/pthon: bad interpreter: No such file or directory.

"দোভাষী" শব্দটি আমাদেরকে শেবাং লাইনের ভূমিকা সম্পর্কে একটি ধারণা দেয় (যদিও প্রযুক্তিগতভাবে নির্দিষ্ট প্রোগ্রামটি অনুবাদক, যেমন catবা কোনও পাঠ্য সম্পাদক ছাড়া অন্য কিছু হতে পারে )। আপনি যখন কোনও ফাইল কার্যকর করার চেষ্টা করেন, যা ঘটেছিল তা এখানে:

  • ইউনিক্স / লিনাক্স প্রোগ্রাম লোডার সেই ফাইলটির প্রথম দুটি বাইট দেখে; যদি এই দুটি বাইট হয় #!, তবে লোডার শেবাং লাইনের অবশিষ্ট অংশটি (শেবাং নিজেই বাদে) ফাইলটির সামগ্রীকে স্ক্রিপ্ট হিসাবে চালানোর জন্য একটি দোভাষী চালু করার আদেশ হিসাবে ব্যাখ্যা করে।
  • প্রোগ্রাম লোডার নির্দিষ্ট বর্ণনাকারী প্রবর্তন করে, এটি একটি আর্গুমেন্ট হিসাবে মূল ফাইলের পথটি খাওয়ায় ।

এর বেশ কয়েকটি সুবিধা রয়েছে:

  • কোন দোভাষী ব্যবহার করবেন (যা পাইথন 2 / পাইথন 3 ইস্যু সমাধান করে) এর উপর স্ক্রিপ্ট-লেখকের আরও নিয়ন্ত্রণ থাকে এবং কখনও কখনও দোভাষীর কাছে অতিরিক্ত যুক্তিও সরবরাহ করতে পারেন (বিশদটির জন্য উইকি পৃষ্ঠা দেখুন)।
  • স্ক্রিপ্টের ফাইলের নাম উপেক্ষা করা হয়েছে , তাই আপনি যা চান পাইথন স্ক্রিপ্টগুলির নাম রাখতে পারেন।

মনে রাখবেন, পরিশেষে, যে ইউনিক্স / লিনাক্স নেই না প্রয়োজন অর্ডার পাইথন স্ক্রিপ্ট চালানোর জন্য কুঁড়েঘর লাইন। মনে রাখবেন যে সমস্ত শেবাং লাইনটি আসলে প্রোগ্রাম লোডারকে একজন দোভাষী বেছে নিতে দেয় । তবে উইন্ডোজ যেমন ঠিক তেমনভাবে করা যায়:

python <myscript>

1
Windows এ আপনি সহজেই হতে পারে .py2এবং .py3পাইথন 2 / পাইথন 3 স্ক্রিপ্টের জন্য এক্সটেনশান নেই। সুতরাং লিনাক্স (+ x বিট) এবং উইন্ডোজ (ফাইল এক্সটেনশন) উভয়েরই ফাইল সিস্টেমে মেটাডেটা দরকার। মূল পার্থক্য হ'ল + এক্স বিট আরও সহজে ট্রানজিটে হারিয়ে যায়। এটি অগত্যা একটি খারাপ দিক নয়।
এমসাল্টারস

1
@ এসএমএলটাররা এক্সিকিউট বিটটিতে এতে অনেক কম তথ্য এনকোড করা রয়েছে। এবং মনে রাখবেন যে কোনও নির্দিষ্ট সিস্টেমে আপনার একাধিক পাইথন 2 ইন্টারপ্রেটার থাকতে পারে (আমার আগের কাজে রুবি এবং অন্যান্য ভাষার সাথে একই অবস্থা ছিল); শেবাং লাইনের মাধ্যমে এটি মোকাবেলা করা প্রায় তুচ্ছ, যদিও উইন্ডোজের পরিস্থিতি যতটা কম ট্র্যাকটেবল হয়ে ওঠে আপনি একাধিক অনুরূপ ফাইল-প্রকার পরিচালনা করার চেষ্টা করেন।
কাইল স্ট্র্যান্ড

এছাড়াও, এক্সটেনশনটি কি আসলেই "মেটাডেটা" হিসাবে গণ্য হয়? এটি ফাইলের নাম মাত্র।
কাইল স্ট্র্যান্ড

1
কোনও ফাইলের মেটাডেটাতে পুরো ফাইলের নাম, তৈরির সময়, অ্যাক্সেস বিট ইত্যাদি অন্তর্ভুক্ত থাকে Only কেবল মেটাডেটার পরিবর্তে সামগ্রীটিই ডেটা। "একাধিক দোভাষী" হিসাবে, এটি আসলেই একটি আসল সমস্যা এবং ঠিক কেন এটি শেবাং লাইনে থাকা উচিত নয় । আপনার যদি আছে /usr/bin/i686/pythonএবং /usr/bin/amd64/python? পুরোপুরি যুক্তিসঙ্গত, তবে এটি পাইথন স্ক্রিপ্টগুলিকে ভেঙে দেয় যার একটি হার্ডকোড অনুমান রয়েছে /usr/bin/python। দোভাষীর পছন্দ স্ক্রিপ্ট লেখকের পছন্দ নয় বরং স্ক্রিপ্ট ব্যবহারকারীর পছন্দ, স্ক্রিপ্ট লেখক কেবল ভাষা (উপভাষা) চয়ন করতে পারেন।
এমসাল্টারস

1
@ এসএমএলটাররা ভাল, /usr/bin/envএনভি-সেটআপ স্ক্রিপ্টগুলির সাথে এটিই। এর উইন্ডোজ সংস্করণটি কী? regeditআপনি .pyযে ইন্টারপ্রেটারটি চান তা নিশ্চিত করার জন্য কোনও ফাইল চালু করার ঠিক আগে স্ক্রিপ্ট চালাচ্ছেন ?
কাইল স্ট্র্যান্ড

41

আপনি যে লাইনটি ইঙ্গিত করেছেন সেটিকে ফাইল / স্ক্রিপ্ট সরাসরি চালানোর সময় কম্পিউটারকে কী প্রোগ্রাম / দোভাষী ব্যবহার করতে হবে এবং স্ক্রিপ্টটি চলার সময় সেই প্রোগ্রামটিতে পাস হওয়া উচিত এমন কোনও যুক্তি ব্যবহার করতে ব্যবহৃত হয়। এটি পাইথনের প্রয়োজনীয়তা নয়, লিনাক্স কার্নেল / সিস্টেমের প্রয়োজন যদি আপনি সরাসরি স্ক্রিপ্টটি চালানোর ইচ্ছা করেন (এবং এটি নীচের বাক্য গঠন দ্বারা পাইথনকে না দিয়ে যান)।

এটি কার্যকর করার প্রয়োজন হয় না python script.pyবা অনুরূপ। এটি কেবল তখনই প্রয়োজন যখন আপনি স্ক্রিপ্ট / ফাইলটি সরাসরি চালানোর ইচ্ছা করেন, দোভাষীকে ব্যবহারের জন্য সরবরাহ না করে (যেমন python)।


বাশ স্ক্রিপ্টের জন্য এটির মতো কিছু থাকবে:

#!/bin/bash [optional Bash arguments]
# Bash script code here
...
exit 0;

এটি সিস্টেমে ইঙ্গিত দেয় যে, এটি সঞ্চালনের পরে এটি চালানো উচিত /bin/bashযা সিস্টেমে শেল / শেল স্ক্রিপ্ট ভাষাগুলির মধ্যে একটি।


পাইথন কোডের জন্য, যদিও এখানে, আপনি পাইথনের মাধ্যমে এক্সিকিউটেবল ফাইলটি চালানোতে চাইছেন, তাই আপনি এটি ব্যাখ্যা করতে চান যে কোন দোভাষী আপনি এটি চালাতে চান।

#!/usr/bin/python [optional Python arguments]
# Python code here
...
exit()

এটি বাশের মতো এটিও ইঙ্গিত করে যে /usr/bin/pythonএটি ব্যবহার করা উচিত (এটি সম্ভবত পৃথক সিস্টেমের কনফিগারেশনের উপর নির্ভর করে পাইথন 2 বা পাইথন 3)।


এই ভাবে, আপনি চালাতে পারেন ./filename.pyবা ./executableবা ./scripttorunসরাসরি।

শুরুতে এই লাইনটি ছাড়াই এবং আপনি ধরে নিয়েছেন যে আপনি ফাইল / স্ক্রিপ্টটি নির্বাহযোগ্য হতে সেট করেছেন এবং ধরে নিচ্ছেন যে আপনি পাইথন স্ক্রিপ্ট নিয়ে কাজ করছেন, আপনার python filename.pyযদি #!/usr/bin/pythonরেখাটি না থাকে তবে আপনাকে চালাতে বা অনুরূপ হতে হবে । (বাশ স্ক্রিপ্টের bash script.shজন্য আপনাকে অন্য স্ক্রিপ্ট / ভাষার জন্য যেমন পার্ল, রুবি ইত্যাদি করতে হবে)

সিন্ট্যাক্সের উপরের অংশটি হাইলাইট করা প্রতিটি বিভাগে ভাষা-নির্দিষ্ট, যদিও এটি আসলে কোনও ব্যাপার নয়।


1
যোগ করার জন্য একটি উত্সাহব্যঞ্জক জিনিস হবে এটি কুঁড়েঘর নিজেই পরে অতিরিক্তি প্যারামিটার নির্দিষ্ট করতে সম্ভব, একই ভাবে বেশিরভাগ ক্ষেত্রে যেন অনুবাদক (সরাসরি বলা হয় #!/bin/bash -x, #!/usr/bin/perl -lanইত্যাদি)।
কোস

7
@ কোস: আমি মনে করি আপনি ঠিক একটি অতিরিক্ত যুক্তি নির্দিষ্ট করতে পারবেন, যা পিঠা ছিল যখন /usr/bin/env pythonসঠিক পাইথনটি ব্যবহার করার জন্য (যখন) ব্যবহার করা হয়েছিল।
unPress325680

@ প্রোগো সমস্যাটি কী তা নিশ্চিত নন envতবে সমস্যাটি মনে হচ্ছে আর্গুমেন্টের সংখ্যা নয় : #!/usr/bin/perl -l -a -nতিনটি যুক্তি রয়েছে তবে এটি কার্যকর works যদিও আবার, আমি সঠিক সমস্যাটি আঁকতে পারছি না।
kos

স্পষ্টত কোনও দোভাষীকে স্ক্রিপ্টের সাথে যুক্তি হিসাবে কল করার পরে, পরবর্তীটি শুরু করার কোনও কারণ নেই ./। অন্য কথায় কেবল python filename.pyবা ঠিকঠাক bash script.shকাজ করবে। অন্তর্ভুক্ত করার একমাত্র কারণ ./হ'ল একটি কমান্ডের নাম, যখন আপনি শেলটি অনুসন্ধান না করতে বলতে চান $PATH(যা সম্ভবত বর্তমান ডিরেক্টরিতে ফাইলগুলি খুঁজে পাবে না) তবে আপনি যেমনটি নির্দিষ্ট করেছেন সেভাবেই চলুন। তবে এটি কমান্ড আর্গুমেন্টের ক্ষেত্রে প্রযোজ্য নয়।
মার্ক ভ্যান লিউউইন

@ কোস: সমস্যাটি কীভাবে envকার্নেল থেকে বাকী আর্গুমেন্ট গ্রহণ করবে তা হতে পারে । এগুলি সমস্তই একটি বৃহত যুক্তি হিসাবে অনুমান করা যেতে পারে যেখানে কোনও বিভাজন-দ্বারা-স্থান সঞ্চালিত হয়নি।
উচ্চারণের

16

লাইন:

#!/usr/bin/python

যাকে 'শেবাং' বলা হয় এবং এটি দোভাষী বাইনারি যাওয়ার পথ নির্দেশ করে যা ফাইলের অন্যান্য কমান্ডগুলির ব্যাখ্যা করতে ব্যবহৃত হবে। এটি সাধারণত কোনও স্ক্রিপ্টের প্রথম লাইন হয়।

সুতরাং লাইনটি #!/usr/bin/pythonনির্দেশ করে যে ফাইলটির সামগ্রীটি pythonবাইনারি দ্বারা অবস্থিত দ্বারা ব্যাখ্যা করা হবে /usr/bin/python

নোট করুন যে শেবাং লাইনটি কার্নেল দ্বারা বিশ্লেষণ করা হয়েছে এবং তারপরে স্ক্রিপ্টটি শেষ পর্যন্ত আর্গুমেন্ট হিসাবে ডাকা হবে:

python script_name

একইভাবে ক্ষেত্রে #!/bin/bash:

bash script_name

2
আমি কখনও হাইফেন দেখেছি বলে মনে হয় না shebang। শব্দটি "হ্যাশ" এবং "ব্যাং" থেকে তৈরি হওয়ায় আপনার বানানটি খুব পরিষ্কার নয়, যেহেতু দেখে মনে হচ্ছে এটি "সে" এবং "ব্যাং" এর সংমিশ্রণ রয়েছে ।
কাইল স্ট্র্যান্ড 21

আপনি চরিত্রটির নাম কীভাবে রেখেছেন তার উপর নির্ভর করে আপনি এটি hashbang( #= "হ্যাশ") বা shebang( #= "তীক্ষ্ণ") বলতে পারেন #। তবে, shebangপ্রকৃতপক্ষে এটি আরও সাধারণ। @ কাইলস্ট্র্যান্ড
বাইট কমান্ডার

7

প্রযুক্তিগতভাবে, এটির প্রয়োজন হয় না। এটির জন্য পরিবেশের জন্য একটি পথ প্রয়োজন যেখানে আপনার স্ক্রিপ্টটি কার্যকর করে। আপনার ভবিষ্যতের স্ক্রিপ্টগুলি তখন / ইউএসআর / বিন / এনভিভ অন্তর্ভুক্ত করা ভাল, পাইথন উল্লেখ করুন। অজগরটি যেখানে ইনস্টল করা হয়েছে তা বিবেচনা করেই আপনার স্ক্রিপ্টটি অজগর পরিবেশে চালিত হয়। আপনি এটি সামঞ্জস্যের কারণে করতে চাইছেন, আপনি নিশ্চিত হতে পারবেন না যে আপনি নিজের কোডটি পরবর্তী ব্যক্তির সাথে usr / bin / python এ পাইথন ইনস্টল করবেন বা তাদের সিস্টেম ফাইলগুলিতে অনুমতি থাকবে।

স্ট্যাক ওভারফ্লো থেকে এখানে একটি অনুরূপ প্রশ্নোত্তর

আপনার স্ক্রিপ্টে যা দেখতে দেখতে এটি হ'ল:

#!/usr/bin/env python

পাইথন 3 কীভাবে নির্দিষ্ট করা যায় তার জন্য আমি কিছুটা উদ্বেগও দেখছি। কিভাবে করতে হবে এখানে আছে:

#!/usr/bin/env python3

5

লিনাক্সে পাইথনকে #!(শেবাং) লাইন লাগতে পারে এবং নাও পারে । এটি পাইথন ইন্টারেক্টিভ মোডে বা পাইথন স্ক্রিপ্টে কোডগুলি চালনা করে কীভাবে পাইথন কোডগুলি পরিচালনা করা হয় তার উপর নির্ভর করে।

পাইথন ইন্টারেক্টিভ মোড ব্যবহারকারীকে পাইথন কোডগুলি সরাসরি টাইপ এবং চালানোর অনুমতি দেয়, যার জন্য শেবাং লাইনের প্রয়োজন হয় না। ইন্টারেক্টিভ মোডটি চালাতে, একটি টার্মিনাল খুলুন এবং pythonপাইথন ২ এক্স এর python3জন্য বা পাইথন ৩. এক্স এর জন্য টাইপ করুন।

$  python
Python 2.7.6 (default, Jun 22 2015, 18:00:18) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

$  python3
Python 3.4.3 (default, Oct 14 2015, 20:33:09) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

পাইথন স্ক্রিপ্টটি ব্যবহারকারীকে একটি সরল পাঠ্য ফাইলে পাইথন কোডগুলি লিখতে এবং সংরক্ষণ করতে দেয়, তারপরে কোডগুলি পরে চালানো যায়। এটির জন্য শেবাং লাইন প্রয়োজন হতে পারে বা নাও পারে। যাইহোক, লিনাক্সে পাইথন স্ক্রিপ্ট ব্যবহারের জন্য যখন শেবাং লাইন প্রয়োজন হয় তার দুটি জানা কারণ রয়েছে।

  1. এক্সিকিউটেবল স্ক্রিপ্টে পাইথন কোডগুলি চালনা করা অর্থাৎ কোডগুলি কীভাবে চালানো উচিত এবং কোন দোভাষী ব্যবহার করে তা নির্ধারণ করে;

  2. পাইথনের নির্দিষ্ট সংস্করণ সম্পর্কিত অর্থাত পাইথন কোডগুলি চালানো অর্থাৎ রান কোডগুলি যা পাইথন ২ এক্স বা পাইথন ৩. এক্স এর সাথে সামঞ্জস্যপূর্ণ

পাইথন স্ক্রিপ্টগুলির সাথে অনুশীলন করুন

নীচে ফাইলগুলির তালিকা এবং বিষয়বস্তু রয়েছে যা আমি #!(শেবাং) লাইনটি প্রয়োজনীয় বা প্রয়োজনীয় নয় এমন কেস দেখাতে ব্যবহার করেছি ।

$  ls -ln *.py
-rw-rw-r-- 1 1000 1000  94 Dec 14 18:37 hello1.py
-rwxrwxr-x 1 1000 1000 116 Dec 14 18:37 hello2e.py
-rw-rw-r-- 1 1000 1000 116 Dec 14 18:37 hello2.py
-rwxrwxr-x 1 1000 1000 117 Dec 14 18:37 hello3e.py
-rwxrwxr-x 1 1000 1000 120 Dec 14 18:37 hello3m.py
-rw-rw-r-- 1 1000 1000 117 Dec 14 18:37 hello3.py

$  file *.py
hello1.py:  ASCII text
hello2e.py: Python script, ASCII text executable
hello2.py:  Python script, ASCII text executable
hello3e.py: Python script, ASCII text executable
hello3m.py: Python script, UTF-8 Unicode (with BOM) text executable
hello3.py:  Python script, ASCII text executable
  • hello1.py শুধুমাত্র উত্স কোড রয়েছে।

    import sys
    sys.stdout.write("Hello from Python %s\n" % (sys.version,))
    print("Hello, World!")
  • hello2.py উত্স কোড এবং শেবাং লাইন রয়েছে।

    #!/usr/bin/env python
    import sys
    sys.stdout.write("Hello from Python %s\n" % (sys.version,))
    print("Hello, World!")
  • hello2e.pyhello2.pyএক্সিকিউটেবল হিসাবে একই এবং রয়েছে ।

  • hello3.pyhello2.pyপ্রথম লাইনের নাম পরিবর্তন করে পাইথন 3 এর সাথে চালানোর জন্য অভিযোজিত ব্যতীত একই থাকে #!/usr/bin/env python3

  • hello3e.pyhello3.pyএক্সিকিউটেবল হিসাবে একই এবং রয়েছে ।

  • hello3m.pyপাঠ্য সম্পাদক যেমন মাউসপ্যাডে বিকল্প হিসাবে hello3.pyসংরক্ষণ করা ব্যতীত একই এবং সম্পাদনযোগ্য হিসাবে তৈরি করা হয় Write Unicode BOM

এই বিন্দুর বাইরে, ব্যবহারকারীকে পাইথন স্ক্রিপ্টগুলি চালনার জন্য দুটি পদ্ধতি উপস্থাপন করা হবে। উভয় পদ্ধতি নীচে হিসাবে প্রদর্শিত হয়েছে।

পদ্ধতি 1: পাইথন প্রোগ্রাম সহ রান করুন

পাইথন 2 এবং পাইথন 3 দিয়ে সোর্স কোড চালানোর সময় নীচে কমান্ডগুলি এবং আউটপুট দেওয়া হয়।

$  python hello1.py
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18) 
[GCC 4.8.2]
Hello, World!

$  python3 hello1.py
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09) 
[GCC 4.8.4]
Hello, World!

পাইথনের উভয় সংস্করণই স্ক্রিপ্টটি সফলভাবে চালাতে সক্ষম হয়েছিল। সুতরাং পাইথন স্ক্রিপ্টটি বা কমান্ডের মাধ্যমে চালানোর সময় শেবাং লাইন প্রয়োজন হয় নাpythonpython3

পদ্ধতি 2: পাইথন স্ক্রিপ্ট হিসাবে চালান

শেবাং লাইনের সাথে সোর্স কোড চলাকালীন নীচে কমান্ডগুলি এবং আউটপুট দেওয়া হয়, যা অ-এক্সিকিউটেবল এবং এক্সিকিউটেবল কেসিসহ পাইথন 2 এবং পাইথন 3 এর সাথে মানিয়ে যায়।

$  ./hello1.py
bash: ./hello1.py: Permission denied

$  ./hello2.py
bash: ./hello2.py: Permission denied

$  ./hello3.py
bash: ./hello3.py: Permission denied

$  ./hello2e.py 
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18) 
[GCC 4.8.2]
Hello, World!

$  ./hello3e.py 
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09) 
[GCC 4.8.4]
Hello, World!

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

স্পষ্টতই, একটি স্ক্রিপ্ট যা সম্পাদনযোগ্য হয়ে উঠেছে তা শেবাং লাইন ছাড়া মূলত অকেজো। সুতরাং, শিবাং লাইন প্রয়োজন এবং এক্সিকিউটেবল স্ক্রিপ্টে পাইথন কোডগুলি চলাকালীন স্ক্রিপ্টটি কার্যকর করা উচিত।

যখন শেবাং কাজ করে না

আমার প্রস্তুত এবং পরীক্ষিত উদাহরণে, hello3m.pyএক্সিকিউটেবল স্ক্রিপ্ট হিসাবে চালানো ব্যর্থ হয়েছে এবং ত্রুটি ফিরে পেয়েছে।

$  ./hello3m.py 
./hello3m.py: line 1: #!/usr/bin/env: No such file or directory

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

অতিরিক্ত উদাহরণ

এই অতিরিক্ত উদাহরণটি কেবল সমর্থন প্রমাণ হিসাবে বিবেচিত হবে। ব্যবহারকারীর এই উদাহরণটি চালানো এড়ানো উচিত, যদিও ফলাফলটি নিরীহ।

আমি আর একটি ফাইল নামক ফাইল তৈরি করেছি hello1e.pyযা এতে একই রকম hello1.pyএবং সম্পাদনযোগ্য হিসাবে তৈরি made এই স্ক্রিপ্টটি চালানো একটি সিনট্যাক্স ত্রুটি ফিরে পেয়েছে।

$  ./hello1e.py 
./hello1e.py: line 2: syntax error near unexpected token `"Hello from Python %s\n"'
./hello1e.py: line 2: `sys.stdout.write("Hello from Python %s\n" % (sys.version,))'

এই স্ক্রিপ্টটি চালানোর সময়, প্রথমে, মাউস কার্সারটি প্লাস-চিহ্নে পরিবর্তিত হবে এবং উপস্থিতি হিসাবে কিছুই করবে না। আমি ডেস্কটপ বা টার্মিনাল উইন্ডোতে ক্লিক না করা পর্যন্ত সিনট্যাক্স ত্রুটিটি প্রদর্শিত হবে না। তারপরে, এই স্ক্রিপ্টটি স্ক্রিপ্টের sysমতো একই ডিরেক্টরিতে একটি ফাইল তৈরি করবে ।

$  file sys
sys: PostScript document text conforming DSC level 3.0, Level 1

sysফাইল, পোস্টস্ক্রিপ্ট ফাইল হিসাবে চিহ্নিত করা হয়েছে ফাইল এক্সটেনশন ছাড়াই। এই ফাইলটি ডকুমেন্ট ভিউয়ারে খোলা যেতে পারে অর্থাৎ এভান্স, এবং ফাইলটিতে আসলে আমি উইন্ডোটির স্ক্রিনশট ছিল যা আমি আগে ক্লিক করেছি। আমার অভিজ্ঞতায় ফাইলটি কয়েকটি মেগাবাইটের চেয়ে বড় হতে পারে।

আবার, শেবাং লাইন প্রয়োজনীয় এবং পাইথন স্ক্রিপ্টকে এক্সিকিউটেবল স্ক্রিপ্ট হিসাবে চালনার সময় স্ক্রিপ্টটি সম্পাদনযোগ্য হতে হবে। অন্যথায়, স্ক্রিপ্টটি উপরে বর্ণিত হিসাবে দুর্ব্যবহার করবে।

অতিরিক্ত নোট

"এক্সিকিউটেবল তৈরি" বা "এক্সিকিউটেবল হতে হবে" শব্দটি স্ক্রিপ্টটি চালানোর অনুমতিকে বোঝায়। এটি chmod +x FILENAMEটার্মিনালে কমান্ড চালিয়ে বা ফাইল পরিচালকের মধ্যে "এই ফাইলটিকে প্রোগ্রাম হিসাবে চালানোর অনুমতি দিন" বিকল্পটি বা প্রোপার্টি উইন্ডোতে অনুরূপ কিছু পরীক্ষা করে is

যদিও অন্যান্য বিদ্যমান উত্তরগুলি প্রায় সমস্ত কিছুর মুখোমুখি হয়েছিল, তবে এই উত্তরটি বিষয়টি ব্যাখ্যা করার জন্য ব্যবহারিক উদাহরণ ব্যবহার করে বিভিন্ন পদ্ধতির গ্রহণ করেছে। কোড বাক্য গঠনটি যত্ন সহকারে রচনা করা হয়েছে, উদাহরণস্বরূপ পাইথন 2 বা পাইথন 3 এর সাথে চালানো যেতে পারে, যেমনটি।

পাইথন কোডগুলি উইন্ডোজে পাইথন ব্যবহার এবং ইউনিক্স প্ল্যাটফর্মে পাইথন ব্যবহার করে সর্বব্যাপী অতিরিক্ত এক-লাইন কোড সহ "হ্যালো, ওয়ার্ল্ড!" কার্যক্রম.

সমস্ত কোড এবং কমান্ডগুলি সম্পূর্ণরূপে পরীক্ষা করা হয়েছে এবং জুবুন্টু 14.04 সিস্টেমে কাজ করে, যা পাইথন ২.7 এবং পাইথন ৩.৪ ডিফল্টরূপে ইনস্টলড ছিল।


4

এর অর্থ হ'ল যখন সেই ফাইলটি কার্যকর করা হয় তখন আপনার কম্পিউটার প্রোগ্রামের সাথে এটি চালিত করতে জানে /usr/bin/python, আপনি এটি অন্য ভাষা থেকে আলাদা করে বলবেন যেমন বাশ আপনি যেখানে করবেন #!/bin/bash। এটি কেবল যাতে আপনি চালাতে পারেন:

./[file-to-execute]

এবং এটি নিজেই জানবে যে কোন ফাইলটি দিয়ে এটি সম্পাদন করা উচিত, তার চেয়ে আপনি নিজের মতো কোনও নির্দিষ্টকরণের চেয়ে:

python ./[file-to-execute].py

#!অংশ সাধারণত একটি হিসাবে refereed হয় কুঁড়েঘর বা কড়্কড়্ শব্দ ঠুং


2
এছাড়াও একটি হ্যাশবাং।
নাফটুলি কে ২

1

যদি আপনি পাইথনের বেশ কয়েকটি সংস্করণ ইনস্টল করেন /usr/bin/envতবে নিশ্চিত করুন যে ব্যবহৃত দোভাষীটি আপনার পরিবেশের প্রথমটি $PATH। বিকল্পটি হ'ল হার্ডকোডের মতো কিছু হবে #!/usr/bin/python;

ইউনিক্সে, একটি এক্সিকিউটেবল ফাইল যার অর্থ ব্যাখ্যা করা উচিত #!তা প্রথম লাইনের শুরুতে দোভাষী ব্যবহার করার পরে, এবং দোভাষী দ্বারা অনুসরণ করা (এবং এটির জন্য প্রয়োজনীয় কোনও পতাকা) ব্যবহার করে কী দোভাষী ব্যবহার করতে হবে তা নির্দেশ করতে পারে।

এই নিয়মটি কেবল ইউএনআইএক্স ভিত্তিক সিস্টেমের জন্য প্রযোজ্য।


0

ওএসের মতো লিনাক্সের জন্য সহায়ক যেখানে পাইথন ২.x এখনও স্ট্যান্ডার্ড, তবে বেশিরভাগ লোকেরা 3.x ডাউনলোডও করে।

2.x ডিফল্ট দ্বারা চালিত হবে। সুতরাং আমার x.x কোডটি আমি #! / Usr / bin / env পাইথন 3 দিয়ে উপসর্গ করি যাতে 3.x কোড চালায়। আমি এমনকি যদি বিটা রিলিজ বা কেবল সামান্য পুরানো সংস্করণগুলি বেছে নেওয়া পছন্দ করি তবে আমি নাবালিক পুনর্বিবেচনার (পাইথন 3.xyz) নির্দিষ্ট করে দিতে পারি।

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