#! / Usr / bin / python3 का उद्देश्य


160

मैंने इसे स्क्रिप्टिंग भाषाओं के एक जोड़े में देखा है, लेकिन इस उदाहरण में, मैं अजगर का उपयोग कर रहा हूं। कई ट्यूटोरियल में, वे #!/usr/bin/python3पहली पंक्ति पर शुरू करेंगे । मुझे समझ नहीं आता कि हमारे पास ऐसा क्यों है।

  • ऑपरेटिंग सिस्टम को यह नहीं पता होना चाहिए कि यह एक पाइथन स्क्रिप्ट है (जाहिर है कि यह स्थापित है क्योंकि आप इसका संदर्भ बना रहे हैं)
  • क्या होगा यदि उपयोगकर्ता एक ऑपरेटिंग सिस्टम का उपयोग कर रहा है जो कि यूनिक्स आधारित नहीं है
  • जो भी कारण से भाषा एक अलग फ़ोल्डर में स्थापित है
  • उपयोगकर्ता का एक अलग संस्करण है। खासकर जब यह पूर्ण संस्करण संख्या नहीं है (जैसे पायथन 3 बनाम पायथन 32)

यदि कुछ भी हो, तो मैं ऊपर सूचीबद्ध कारणों की वजह से अजगर की स्क्रिप्ट को तोड़ता हुआ देख सकता था।



9
मैं इस सवाल पर आता हूं सिर्फ शेबंग स्ट्रिंग को कॉपी करने के लिए।
.ोमर्जर्क

जवाबों:


260

#!/usr/bin/python3एक Shebang लाइन है

एक शेबबैंग लाइन परिभाषित करती है कि दुभाषिया कहाँ स्थित है। इस मामले में, python3दुभाषिया में स्थित है /usr/bin/python3। एक कुटिया लाइन भी एक हो सकता है bash, ruby, perlया किसी अन्य पटकथा भाषाओं 'दुभाषिया, उदाहरण के लिए:#!/bin/bash

शेबबैंग लाइन के बिना, ऑपरेटिंग सिस्टम को पता नहीं है कि यह एक अजगर स्क्रिप्ट है, भले ही आप स्क्रिप्ट पर निष्पादन ध्वज सेट करें और इसे जैसे चलाएं ./script.py। स्क्रिप्ट को python3 में डिफ़ॉल्ट रूप से चलाने के लिए, इसे या तो इनवॉइस python3 script.pyलाइन पर सेट करें या सेट करें।

यदि आपके #!/usr/bin/env python3पास विभिन्न स्थानों पर भाषा व्याख्याकार स्थापित है, तो आप विभिन्न प्रणालियों में पोर्टेबिलिटी के लिए उपयोग कर सकते हैं ।


8
तो #! /usr/bin/env python3चुना जाना चाहिए #! /usr/bin/python3?
winklerrr

4
@winklerrr हाँ, यह अधिक व्यापक रूप से उपयोग किया जाता है।
मेर्रेएम

20

इसे हैश-बैंग कहा जाता है। यदि आप स्क्रिप्ट को शेल से चलाते हैं, तो यह स्क्रिप्ट की व्याख्या करने के लिए क्या प्रोग्राम शुरू किया जाना चाहिए, यह पता लगाने के लिए पहली पंक्ति का निरीक्षण करेगा।

एक गैर यूनिक्स आधारित ओएस स्क्रिप्ट चलाने के तरीके का पता लगाने के लिए अपने स्वयं के नियमों का उपयोग करेगा। उदाहरण के लिए विंडोज फाइलनेम एक्सटेंशन का उपयोग करेगा और #पहली पंक्ति को टिप्पणी के रूप में माना जाएगा।

यदि पायथन निष्पादन योग्य मार्ग गलत है, तो स्वाभाविक रूप से स्क्रिप्ट विफल हो जाएगी। मानक कन्वेंशन द्वारा निर्दिष्ट किसी भी स्थान से वास्तविक निष्पादन योग्य के लिए लिंक बनाना आसान है।


12

यह लाइन प्रोग्राम को निष्पादन योग्य बनाने में मदद करती है जो स्क्रिप्ट चलाएगी। यह शेबंग नोटेशन अधिकांश स्क्रिप्टिंग भाषाओं में काफी मानक है (कम से कम जैसा कि बड़े-बड़े ऑपरेटिंग सिस्टम पर उपयोग किया जाता है)।

इस पंक्ति का एक महत्वपूर्ण पहलू यह निर्दिष्ट कर रहा है कि किस दुभाषिया का उपयोग किया जाएगा। कई विकास-केंद्रित लिनक्स वितरणों पर, उदाहरण के लिए, एक ही समय में अजगर के कई संस्करणों को स्थापित करना सामान्य है।

पायथन 2.x और पायथन 3 100% संगत नहीं हैं, इसलिए यह अंतर बहुत महत्वपूर्ण हो सकता है। तो #! /usr/bin/pythonऔर #! /usr/bin/python3न ही (और न ही #! /usr/bin/env python3इस पृष्ठ पर अन्यत्र उल्लेख के समान ही हैं ।


6
  1. और यह लाइन कैसी है

  2. इसकी अनदेखी की जाती है।

  3. यह चलाने में विफल हो जाएगा, और इसे उचित स्थान पर इंगित करने के लिए बदल दिया जाना चाहिए। या envइस्तेमाल किया जाना चाहिए।

  4. यह चलाने में विफल होगा, और संभवतया एक अलग संस्करण के तहत चलने में विफल हो सकता है।


3

यह स्पष्ट करने के लिए कि शेबंग लाइन 3.7 पायथन डॉक से खिड़कियों के लिए कैसे काम करती है :

  • अगर किसी स्क्रिप्ट फ़ाइल की पहली लाइन # से शुरू होती है, तो इसे "शेबंग" लाइन के रूप में जाना जाता है। लिनक्स और अन्य यूनिक्स जैसे ऑपरेटिंग सिस्टम में ऐसी लाइनों के लिए मूल समर्थन होता है और वे आमतौर पर इस तरह के सिस्टम पर उपयोग करते हैं कि यह दर्शाया जाए कि किसी स्क्रिप्ट को कैसे निष्पादित किया जाना चाहिए।
  • विंडोज के लिए पाइथन लॉन्चर विंडोज पर पाइथन स्क्रिप्ट के साथ समान सुविधाओं का उपयोग करने की अनुमति देता है
  • यूनिक्स और विंडोज के बीच पाइथन लिपियों में शेबंग लाइन्स को पोर्टेबल रखने की अनुमति देने के लिए, लॉन्चर कई 'वर्चुअल' कमांड का समर्थन करता है, जिसमें निर्दिष्ट किया जाता है कि किस दुभाषिया का उपयोग करना है। समर्थित वर्चुअल कमांड हैं:
    • / usr / bin / env अजगर
      • शेबंग लाइन के / usr / bin / env फॉर्म में एक और विशेष गुण है। स्थापित पायथन दुभाषियों की तलाश करने से पहले, यह फ़ॉर्म पायथन निष्पादन योग्य के लिए निष्पादन योग्य PATH की खोज करेगा। यह यूनिक्स एनवी प्रोग्राम के व्यवहार से मेल खाता है, जो एक पाथ खोज करता है।
    • / Usr / bin / अजगर
    • / Usr / स्थानीय / bin / अजगर
    • अजगर

2

वास्तव में फ़ाइल किस प्रकार की फ़ाइल का निर्धारण बहुत जटिल है, इसलिए अब ऑपरेटिंग सिस्टम को पता नहीं चल सकता है। इसके आधार पर बहुत सारे अनुमान लगा सकते हैं -

  • विस्तार
  • यूटीआई
  • माइम

लेकिन कमांड लाइन उस सब से परेशान नहीं है, क्योंकि यह एक सीमित बैकवर्ड संगत परत पर चलता है, जब से कि फैंसी बकवास का कोई मतलब नहीं था। यदि आप इसे डबल क्लिक करते हैं, तो एक आधुनिक OS यह पता लगा सकता है कि- लेकिन यदि आप इसे किसी टर्मिनल से चलाते हैं तो नहीं, क्योंकि टर्मिनल आपके फैंसी OS विशिष्ट फ़ाइल टाइपिंग API की परवाह नहीं करता है।

अन्य बिंदुओं के संबंध में। यह एक सुविधा है, इसे चलाना संभव है

python3 path/to/your/script

यदि आपका अजगर निर्दिष्ट पथ में नहीं है, तो यह काम नहीं करेगा, लेकिन हम इस काम को सामान बनाने के लिए स्थापित करते हैं, न कि दूसरे तरीके से। यह वास्तव में कोई बात नहीं है अगर आप * निक्स के नीचे हैं, यह आपके शेल पर निर्भर है कि क्या इस लाइन पर विचार करें क्योंकि यह ए है shellcode। इसलिए उदाहरण के लिए आप bashविंडोज के तहत चला सकते हैं ।

आप वास्तव में इस लाइन को पूरी तरह से हटा सकते हैं, इसका मतलब है कि कॉल करने वाले को दुभाषिया निर्दिष्ट करना होगा। इसके अलावा अपने दुभाषियों को गैर-मानक स्थानों पर न रखें और फिर दुभाषिया प्रदान किए बिना स्क्रिप्ट को कॉल करने का प्रयास करें।

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