2012-03-20 20 views
8

क्या पाइथन लाइब्रेरी मॉड्यूल #!/usr/bin/env पायथन से शुरू होना चाहिए?क्या पाइथन लाइब्रेरी मॉड्यूल #!/Usr/bin/env पायथन से शुरू होना चाहिए?

*.py/usr/share/pyshared (जहां पाइथन लिब डेबियन में संग्रहीत हैं) में पहली पंक्तियों को देखते हुए पता चलता है कि हैशबैंग लाइन से शुरू होने वाली दोनों फाइलें हैं और जो नहीं हैं।

क्या इस लाइन को शामिल या निकालने का कोई कारण है?

+0

बीटीडब्ल्यू सिर्फ '#! पायथन 'के साथ कुछ गलत है? – Kos

+0

@ कोस: हाँ, वहां है: यह काम नहीं करता है। कम से कम हर जगह नहीं। '/ usr/bin/env' पूरी तरह पोर्टेबिलिटी के लिए उपयोग किया जाता है। –

+1

और इसलिए भी क्योंकि यदि आप वर्चुअलनव या कुछ अन्य लोकप्रिय टूल का उपयोग कर रहे हैं तो वास्तविक पायथन दुभाषिया का स्थान बदल जाएगा। –

उत्तर

6

कारण /usr/share/pyshared में कुछ फ़ाइलों ने शेबैंग & घोषित किया है कुछ समझाने में आसान नहीं हैं। फाइलें uno.py और pyinotify.py लें। पूर्व में कोई शेबांग नहीं है और बाद वाला है।

  1. uno.py एक पायथन मॉड्यूल है जिसे अन्य प्रोग्राम/स्क्रिप्ट में आयात और उपयोग किया जाएगा। इस प्रकार इसे कमांड लाइन से सीधे निष्पादित नहीं किया जाएगा।
  2. दूसरी ओर pyinotify.py पर मामला होता है और जैसा कि आप देख सकते हैं कि यह (यदि आप उस पर एक chmod u+x चलाने यह एक निष्पादन में बनाया जा सकता है) तल पर निम्न पंक्ति में शामिल हैं:

    if __name__ == '__main__': 
        command_line() 
    

आप शेबैंग में पाइथन बाइनरी को हार्डकोड कर सकते हैं, लेकिन जैसा कि अन्य ने उल्लेख किया है, /usr/bin/env का उपयोग करके इसे और अधिक पोर्टेबल बना दिया जाएगा।

0

अगर आप अपनी स्क्रिप्ट एक निष्पादन योग्य होना चाहते हैं, तो आप इस लाइन

+1

यह सीधे सवाल का जवाब नहीं देता है। कृपया अपना उत्तर सुधारें। – Tadeck

+0

यदि मैं नहीं करता, तो क्या इस लाइन को शामिल करने का कोई कारण है? शीर्ष स्तर, केवल परिभाषाओं पर निष्पादन योग्य कुछ भी नहीं है। –

+6

-1। यह जवाब गलत है। इस पंक्ति का उपयोग एक दुभाषिया निर्दिष्ट करने के लिए किया जाता है और "स्क्रिप्ट और निष्पादन योग्य" नहीं करने के लिए किया जाता है। उत्तरार्द्ध फ़ाइल अनुमतियों को बदलकर हासिल किया जाता है (यूनिक्स पर)। –

5

यह पंक्ति एक कुटिया लाइन है शामिल करने के लिए की है। विवरण के लिए, कृपया wikipedia article से परामर्श लें। असल में, यह दुभाषिया निर्दिष्ट करता है जिसके साथ फ़ाइल को निष्पादित किया जा सकता है यदि सीधे कमांड लाइन से चलाया जाता है।

फ़ाइल के शीर्ष पर इस पंक्ति को शामिल करने की आवश्यकता नहीं है जब तक कि आप इसे सीधे खोल से चलाने की योजना बना रहे हों। कुछ पायथन मॉड्यूल (उदा। Ftplib) में कुछ कार्यक्षमता होती है जब आप सीधे उन्हें चलाते हैं। इन पर #! लाइन होगी। अधिकांश में ऐसी कार्यक्षमता नहीं होती है और इसलिए इस लाइन की आवश्यकता नहीं होती है।