शेल प्रोग्रामिंग मजेदार है । लेकिन पाइथन भी है । सी की पृष्ठभूमि वाले लोग , या सबसे महत्वपूर्ण लोग जो विंडोज़ का उपयोग करते हैं, वे सहमत नहीं होंगे। लोग अक्सर आदेश लाइन वाले की तुलना में ग्राफिकल आधारित इंटरफ़ेस का उपयोग करना पसंद करते हैं। लेकिन यह इतना गलत है। ग्राफिकल यूजर इंटरफेस उन लोगों के लिए है जो सोचते हैं कि सॉफ्टवेयर ऐसा कर रहा है जो इसका वर्णन करता है। लेकिन हमेशा ऐसा ही नहीं होता है। खासतौर पर शेल प्रोग्रामिंग विंडो के मामले में जहां वायरस और मालवेयर ने एक तूफान बनाया है जो टोरनाडो का आकार है। तो आदेश लाइन इंटरफ़ेस का उपयोग करने वाले लोग आमतौर पर सहमत होंगे कि वे जो कर रहे हैं वह सही है, और मैं उनसे सहमत हूं कि वे सही हैं।
कई बार आप आमतौर पर अटक जाते हैं और एक संपूर्ण ग्राफिक इंटरफ़ेस आधारित सॉफ़्टवेयर के कारण पूरा कंप्यूटर लटकता है। कमांड लाइन इंटरफ़ेस पर काम करना अक्सर अधिक सुरुचिपूर्ण, तेज़ और सबसे महत्वपूर्ण बात यह है कि आप जानते हैं कि आप क्या निष्पादित कर रहे हैं। लेकिन फिर, गोले और लेखन कार्यक्रमों का उपयोग करना ऐसा कुछ नहीं है जो हर कोई करना पसंद करेगा।
इसके अलावा, सी या जावा में प्रोग्राम लिखना वास्तव में विंडोज़ में ग्राफिक यूजर इंटरफेस आधारित सॉफ्टवेयर का उपयोग करने से भी बदतर होगा। मैं यहां सी या जावा को अपशब्द नहीं दे रहा हूं, बस यह है कि वे रोजमर्रा के उपयोग के लिए उपयुक्त नहीं हैं। और यह वह जगह है जहां शेल प्रोग्रामिंग और पायथन भाषाएं जैसे स्क्रिप्टिंग भाषाएं उत्कृष्ट हैं। तो, आज हम यहां युद्ध में हैं जो कि छोटे और बड़े अनुप्रयोगों के लिए अधिक उपयुक्त है। या यह है कि हम वास्तव में दोनों को एक साथ जोड़ सकते हैं और दोनों में से कुछ नया और बेहतर बना सकते हैं। आइए उन दोनों में गहराई से नजर डालें और देखें कि यह हमें कहां लेता है।
बैश शेल स्क्रिप्टिंग
शेल स्क्रिप्टिंग वास्तव में कमाल है। कोड की केवल एक पंक्ति में आप अपनी अधिकांश नौकरियां यहां लगभग कर सकते हैं। उदाहरण के लिए, कोड का यह टुकड़ा लें: –
$ touch file.txt | echo -e ‘hello\n New\n World\n hello\n Hello’ >> file.txt | cat file.txt | sort | uniq | wc -l |
तो, जैसा कि आप देख सकते हैं, यहां बहुत सारी शेल स्क्रिप्टिंग चल रही है, लेकिन वास्तव में क्या हो रहा है? पहले ‘| ‘पाइप के रूप में जाना जाता है। इसका उपयोग एक फ़ाइल के आउटपुट को दूसरे में स्थानांतरित करने के लिए किया जाता है। किसी भी कथन को मुद्रित करने के लिए ‘स्पर्श’ वाक्यविन्यास का उपयोग किसी भी फ़ाइल को बनाने के लिए किया जाता है और इको वाक्यविन्यास का उपयोग किया जाता है। किसी भी फ़ाइल या प्रोग्राम में आउटपुट डालने के लिए डबल दाएं तरफ तीर ‘>>’ का उपयोग किया जाता है। फ़ाइल की सामग्री को पढ़ने के लिए ‘कॅट’ वाक्यविन्यास का उपयोग किया जाता है। क्रमबद्ध क्रम में क्रमबद्ध करने के लिए सॉर्ट का उपयोग किया जाता है और सॉर्टिंग से डुप्लिकेट को हटाने के लिए ‘uniq’ का उपयोग किया जाता है। लाइनों की गिनती के लिए ‘डब्ल्यूसी’ का उपयोग किया जाता है और -एल उन्हें प्रिंट करने के लिए सिर्फ एक ध्वज है। तो इन सभी जंजीरों के आदेश निम्नलिखित करते हैं।
- पहले फ़ाइल फ़ाइल के साथ नाम फ़ाइल के साथ एक फ़ाइल बनाई गई है ताकि यह एक टेक्स्ट फ़ाइल को सूचित किया जा सके।
- दूसरा, echo -e का उपयोगtxt फ़ाइल के अंदर कई शब्दों को मुद्रित करने के लिए किया जाता है और ‘स्लैश एन’ या ‘\ n’ का उपयोग न्यूलाइन में प्रवेश करने या अगली पंक्ति में जाने के लिए किया जाता है।
- फ़ाइल में स्ट्रिंग दर्ज करने के बाद, फ़ाइल को पढ़ा जाता है, क्रमबद्ध किया जाता है और किसी भी मौजूदा डुप्लिकेट को हटाने के लिए यूनिक सिंटैक्स में स्थानांतरित किया जाता है, यहां हमारे मामले में ‘हैलो’ है।
- अंत में, हम ‘wc -l’ का उपयोग करके लाइनों की संख्या को गिनने और टर्मिनल स्क्रीन पर प्रिंट करने के लिए प्रिंट करते हैं।
इसलिए, उपर्युक्त कोड की केवल एक पंक्ति है, लेकिन जब अधिक स्थितियां डाली जाती हैं तो यह जटिल हो सकती है। इस प्रकार, शेल स्क्रिप्ट अच्छी हैं, लेकिन इन्हें हर समय नई नौकरियों के लिए उपयोग नहीं किया जा सकता है। कभी-कभी, आप ग्राफिक यूजर इंटरफेस के रूप में सरल, चीजों को सरल बनाना चाहते हैं । शेल स्क्रिप्ट वास्तव में बैच स्क्रिप्ट चलाने और बार-बार नौकरियों के लिए बहुत अच्छी हैं, लेकिन साथ ही वे कुछ नुकसान के साथ आते हैं: –
- शेल स्क्रिप्ट बहुत बड़े हो जाते हैं क्योंकि वे बड़े हो जाते हैं।
- स्क्रिप्ट्स पुन: उपयोग लगभग कोई नहीं है।मेरा मतलब यह है कि, सी या अन्य जावा कोड में बाश स्क्रिप्ट डालने में बहुत मुश्किल होती है।
- एचटीएमएलपार्सिंग जैसी उन्नत सुविधाएं बैश के लिए आसानी से उपलब्ध नहीं हैं।
हालांकि, यहां बचाव के लिए पाइथन है, और इसके लिए सबसे उपयुक्त प्रतिस्थापन है। लेकिन बैश शेल स्क्रिप्टिंग पूरी तरह से बदलने योग्य है? चलो एक नज़र डालते हैं।
अनुशंसित पाठ्यक्रम
- जे 2 ईई व्यापक में ऑनलाइन प्रमाणन प्रशिक्षण
- पेशेवर आर प्रोग्रामिंग प्रशिक्षण
- जाओ प्रोग्रामिंग में ऑनलाइन प्रमाणन प्रशिक्षण
- हास्केल कार्यक्रम पर प्रशिक्षण
पायथन शेल स्क्रिप्टिंग
पाइथन डिफ़ॉल्ट रूप से लगभग सभी लिनक्स और यूनिक्स सिस्टम पर स्थापित है । कभी-कभी वितरण में पुराना संस्करण हो सकता है, लेकिन इसे केवल एक साधारण कमांड द्वारा अपडेट किया जा सकता है। पायथन शेल प्रोग्रामिंग शुरुआती लोगों के लिए भी लिखने के लिए समझने और साफ करने के लिए बहुत आसान है। इसके अलावा, डिफ़ॉल्ट रूप से पायथन में रीड इवल प्रिंट लूप की शैली है जो दुभाषिया में नए कोडों को आजमाने में मदद करता है। लेकिन बैशन शेल स्क्रिप्टिंग की सहायता के बिना सिर्फ पाइथन का उपयोग करना मुश्किल हो सकता है। इसके अलावा, हमारे पिछले एक लाइन कार्यक्रम में, हमने डुप्लिकेट को हटाने के लिए ‘यूनिक’ वाक्यविन्यास का उपयोग किया, लेकिन यह हमें नहीं दिखाया कि डुप्लिकेट क्या था। तो, ऐसा करने के लिए एक पायथन प्रोग्राम लिखने दें: –
अब, यह फ़ाइल पहले sys.stdin ऑब्जेक्ट से इनपुट पढ़ती है। सभी आउटपुट sys.stdout ऑब्जेक्ट पर लिखा गया है। इस स्क्रिप्ट को बनाने के बाद, यह मानते हुए कि आपने इसे answer.py के रूप में नामित किया है, आप टर्मिनल में निम्न शेल स्क्रिप्ट निष्पादित कर सकते हैं और आपको सभी डुप्लिकेट तारों की कुल गणना मिल जाएगी।
$ cat file.txt | python order.py |
इसी प्रकार, हम वें सॉर्ट सिंटैक्स का उपयोग करके इसे भी हल कर सकते हैं: –
$ cat file.txt | python order.py | sort -rn |
पाइथन शेल बनाम बैश शेल प्रोग्रामिंग स्क्रिप्टिंग
अब हमने देखा है कि हम आदेशों की एक श्रृंखला बनाने और उन्हें एक साथ निष्पादित करने के लिए पाइथन और शेल स्क्रिप्ट को कैसे जोड़ सकते हैं। अब, चलिए एक कदम आगे ले जाएं और देखें कि पाइथन पूरी तरह से बैश शेल को प्रतिस्थापित कर सकता है या नहीं।
प्रदर्शन के संदर्भ में, बैश शेल प्रोग्रामिंग की बात करते हुए, बैश पूरी तरह से क्रॅप आउट ऑफ पाइथन धड़कता है। लेकिन यदि आप इसे डेटा प्रकारों और अन्य उन्नत सामानों से तुलना करते हैं, तो बैश में अधिक अनुकूलता नहीं है। बैश शेल स्क्रिप्ट का स्टार्ट-अप समय 2.8 मील सेकेंड है जबकि पायथन की 11.1 मिलीलीटर सेकंड है। अधिक स्पष्ट होने के लिए, बैश पाइथन की तरह एक सामान्य उद्देश्य भाषा है, लेकिन दोनों की अपनी ताकत और कमजोरियां हैं। अधिकांश लिनक्स वितरण में बैश शेल प्रोग्रामिंग डिफ़ॉल्ट टर्मिनल है और इस प्रकार यह प्रदर्शन के संदर्भ में हमेशा तेज होगा। लेकिन क्या इसका मतलब यह है कि यह पूरी तरह से पाइथन को प्रतिस्थापित कर सकता है? नहीं। बड़े कार्यक्रमों से निपटने पर, बैश जटिल हो रहा है जबकि पायथन नहीं करता है। जहां तक मुझे पता है कि पाइथन को वस्तु उन्मुख भाषा के रूप में भी इस्तेमाल किया जा सकता है। यदि आप सिर्फ एक नौसिखिया हैं, तो आप दोनों के बीच अंतर भी नहीं जानते हो सकता है। पायथन सबसे सुरुचिपूर्ण पटकथा भाषा है, यहां तक कि इससे भी ज्यादा रुबी और पर्ल । दूसरी तरफ बैश शेल प्रोग्रामिंग वास्तव में एक कमांड के आउटपुट को दूसरे में आउटपुट करने में बहुत उत्कृष्ट है।
शेल स्क्रिप्टिंग सरल है, और यह पाइथन के रूप में शक्तिशाली नहीं है। यह ढांचे के साथ सौदा नहीं करता है और शेल स्क्रिप्टिंग का उपयोग कर वेब से संबंधित कार्यक्रमों के साथ जाने के लिए कठिन है। शेल स्क्रिप्टिंग की असली शक्ति स्ट्रीम टेक्स्ट एडिटर या sed, Awk प्रोग्राम्स और इसी तरह के ऐप्स में निहित है।
नोट: एक पायथन डेवलपर बनें
जानें कि एक सरल पायथन प्रोग्राम कैसे बनाएं। पुन: प्रयोज्य और टेस्टेबल कोड लिखें। चिकनी चल रही और अभिनव वेब अनुप्रयोगों और सॉफ्टवेयर उत्पादों का विकास करें।
#!/usr/bin/env pythonimport sys#importing system modules to work with directory filesif __name__ == “__main__”:# Starting with an empty dictionary here. Which is termed as the order# All keys in this dictionary appear as a name and the specified values for them# will be the amount of times that specific name will appear.order = {}# sys.stdin is an object used for files. All those functions that’s being applied to# a file object can also be used for sys.stdin.
for order in sys.stdin.readlines(): order = order.strip() if order in orders: orders[order] += 1 else: orders[order] = 1 for order, count in orders.iteritems(): sys.stdout.write(“%d\t%s\n” % (count, order)) |
अब, यह फ़ाइल पहले sys.stdin ऑब्जेक्ट से इनपुट पढ़ती है। सभी आउटपुट sys.stdout ऑब्जेक्ट पर लिखा गया है। इस स्क्रिप्ट को बनाने के बाद, यह मानते हुए कि आपने इसे answer.py के रूप में नामित किया है, आप टर्मिनल में निम्न शेल स्क्रिप्ट निष्पादित कर सकते हैं और आपको सभी डुप्लिकेट तारों की कुल गणना मिल जाएगी।
$ cat file.txt | python order.py |
Similarly, we can also sort this out by using th sort syntax:-
$ cat file.txt | python order.py | sort -rn |
फ़ाइल हैंडलिंग और वेब अनुप्रयोग विकास
बैश शेल स्क्रिप्टिंग फाइलों से निपटने के दौरान बेकार और तेज़ काम करता है। फाइलों को संभालने से मेरा मतलब है कि प्रतिलिपि बनाना, क्लोनिंग डिस्क, नेटवर्किंग के लिए बैकअप ऐप्स लिखना, एफटीपी सर्वर, फ़ाइल इनपुट संग्रहीत करना और बाद में उन्हें एक्सेस करना और बाद में उन आउटपुट को पाइप की मदद से कुछ और स्थानांतरित करना है। दूसरी ओर पाइथन डेटा के हिस्सों से निपटने के लिए अधिक उपयोगी है जैसे कि फ़ाइल और प्रोसेसिंग डेटा से डेटा पढ़ना। यदि मैं अधिक विशिष्ट हूं, तो बैश प्रोग्रामिंग भाषा भी नहीं है। यह एक सरल शेल है जो प्रक्रिया को अधिक तेज और त्वरित होने के लिए कमांड लाइन का उपयोग करके सिस्टम फ़ाइलों से निपटने की दिशा में लक्षित किया गया था।
इस प्रकार, यदि आप बैश शेल प्रोग्रामिंग को सही तरीके से जानते हैं, तो आप यह भी जानते हैं कि बाश में चर और स्कॉप्स बेहद सीमित हैं। दूसरी ओर पाइथन प्रोग्रामिंग भाषा की तुलना में एक शेल स्क्रिप्टिंग भाषा है। यदि हम बैश को एक प्रोग्रामिंग भाषा के रूप में देखते हैं, तो यह पाइथन कहने की तरह एक वस्तु उन्मुख शेल प्रोग्रामिंग भाषा है। कोई वस्तु उन्मुख तरीके से पाइथन से निपट सकता है, लेकिन यह कभी भी सी या जावा की तरह उन्मुख वस्तु नहीं होगा। इसी तरह, बाश हालांकि एक पटकथा भाषा है; यह बेहतर रूप से उपयोग किए जाने वाले कुछ कार्यक्रमों के बजाय फ़ाइलों से निपटने के लिए आवश्यक कुछ है। इसके अलावा, हालांकि पाइथन एक शेल स्क्रिप्टिंग भाषा है, लेकिन यह वास्तव में अपने स्वयं के शेल के भीतर काम करता है। उदाहरण के लिए, बैश शेल के माध्यम से डेस्कटॉप पर मौजूद सभी फाइलों को ले जाने के लिए कुछ अन्य यादृच्छिक निर्देशिका में जाना होगा:
$ cd Desktop$ mv * randomDirectory |
लेकिन दूसरी ओर, पाइथन में एक ही चीज़ करना थोड़ा और जटिल है। यह कुछ इस तरह चलता है: –
import os, globfor fname in glob.glob (‘*’):os.rename (fname, ‘randomdirectory’) |
हालांकि, सबसे अच्छा, कोई इसे इस तरह से सबसे कॉम्पैक्ट बना सकता है: –
import os, glob[ os.rename (fname, ‘randomdirectory’) for fname in glob.glob ( ‘*’ ) ] |
किसी भी भाषा को सीखते समय , लोग अक्सर आपको बताएंगे कि बुनियादी बातों को साफ करने और उन सभी चीजों को कैसे प्राप्त किया जाए, लेकिन वे आपको नहीं बताएंगे कि सिस्टम के साथ पहले कैसे निपटना है जो सबसे महत्वपूर्ण है। और इसके अलावा, पायथन और बैश दोनों शेल स्क्रिप्टिंग भाषा हैं जिसका अर्थ है कि दोनों मुख्य रूप से सिस्टम और इसकी फाइलों से निपटने के लिए विकसित किए जाते हैं।
पायथन के अंदर बैश?
हाँ, आप इसे पढ़ें। अब तक हमने पढ़ा है कि हम शेल के अंदर पाइथन स्क्रिप्ट कैसे पेश कर सकते हैं। लेकिन हम पाइथन की लिपियों के भीतर शेल स्क्रिप्ट्स भी पेश कर सकते हैं। उदाहरण के लिए इसे लें: – पायथन शेल में ‘apt-get update’ टाइप करें? आपको स्पष्ट रूप से अमान्य वाक्य विन्यास जैसी कुछ त्रुटि मिल जाएगी। तो, बात यह है कि यदि आप ‘ls, cd, mv’ या पायथन में किसी भी अन्य प्रकार के बैश कोड का उपयोग करना चाहते हैं, तो आपको ओएस मॉड्यूल आयात करना होगा। अब, एक काम करें, निम्न कोड कॉपी करें और इसे पाइथन के शेल में पेस्ट करें, और जांचें कि यह कैसे काम करता है: –
$ python>>>from os import *>>> system ( ‘sudo apt-get update’ ) |
और अब यह काम करता है … हाँ। पाइथन और बैश स्क्रिप्ट एक साथ काम करने के तरीके के बारे में यह एक और तरीका है। इसके अलावा, एक और पायथन मॉड्यूल है जो विशेष रूप से बैश के साथ काम करने के लिए बनाया गया है। इस मॉड्यूल को पेक्सपेक्ट के रूप में जाना जाता है। पेक्सपेक्ट एक पायथन मॉड्यूल है जिसका प्रयोग बाल प्रक्रियाओं को बढ़ाने, उन्हें नियंत्रित करने और बाल प्रक्रिया के अनुरोध के अनुसार परिणाम लौटने के लिए किया जाता है। पेक्सपेक्ट मॉड्यूल के अंदर आवश्यक मॉड्यूल और बाल प्रक्रियाओं को आयात करने के लिए एक बेहद आसान इंटरफेस है और तदनुसार उन्हें निष्पादित करें। एक को बस अपने सिस्टम में पेक्सपेक्ट स्थापित करने के लिए स्थापित करने के लिए पाइप की आवश्यकता होती है और कोई मॉड्यूल को निम्नानुसार स्थापित कर सकता है: –
$ pip install pexpect |
पेक्सपेक्ट के संस्करण को 3.3 से अधिक या विशेष रूप से 2.7 से अधिक पायथन संस्करण की आवश्यकता है।
पाइथन और बैश को मिलाकर वास्तव में बहुत कुछ है और पायथन और बैश की लिपि के मिश्रण के रूप में कुछ भी बेहतर काम नहीं करता है। यह मिश्रण पट्टी के कारण स्क्रिप्ट को तेजी से बनाता है और पाइथन की वजह से उन्नत सुविधाओं को शामिल करता है। कोई भी पेपेपेक्ट और इसके दस्तावेज़ों के बारे में https://pexpect.readthedocs.org/online पर पढ़ सकता है।
अनुशंसित लेख
यहां कुछ लेख दिए गए हैं जो आपको बैश स्क्रिप्टिंग और पायथन के बारे में अधिक जानकारी प्राप्त करने में मदद करेंगे ताकि लिंक से गुजरें।
- शीर्ष 25 अद्भुत पायथन साक्षात्कार प्रश्न और उत्तर
पाइथन बनाम जावास्क्रिप्ट अंतर
आर प्रोग्रामिंग बनाम पायथन