पायथन में आम बैश मुहावरों को कैसे लागू किया जाए? [बन्द है]


242

मैं वर्तमान में बुरी तरह से याद AWK, sed, बैश और पर्ल के एक छोटे से बिट का एक गुच्छा के माध्यम से अपने textfile हेरफेर करते हैं।

मैंने कुछ स्थानों का उल्लेख किया है कि इस तरह की चीज़ के लिए अजगर अच्छा है। शेल स्क्रिप्टिंग, AWK, sed और दोस्तों को बदलने के लिए मैं पायथन का उपयोग कैसे कर सकता हूं?


3
pythonpy python syntax का उपयोग करके awk और sed के लिए एक अच्छा प्रतियोगी है: github.com/Russell91/pythonpy
RussellStewart

4
आप शेल्फ़ का उपयोग कर सकते हैं जिसे दिमाग में एक विचार के साथ डिज़ाइन किया गया था कि अजगर को बदलने के लिए / शिथिलता के साथ github.com/lamerman/shellpy
Alexander Ponomarev

यह मेरा सवाल है, मुझे समझ में नहीं आता कि यह राय आधारित क्यों है। शीर्ष उत्तर प्रत्येक मुख्य चीजों को सूचीबद्ध करता है जो एक शेल करता है, और आपको बताता है कि उन्हें अजगर में कैसे करना है। कि मेरी राय में गैर-राय तरीके से सवाल का जवाब दिया।
क्रिस जेफरसन

यह सवाल, और यह बंद है, यहाँ
एरिक

जवाबों:


144

किसी भी शेल में कई सुविधाएँ होती हैं।

  • आवश्यक लिनक्स / यूनिक्स कमांड। ये सभी उप- पुस्तकालय के माध्यम से उपलब्ध हैं । यह हमेशा सभी बाहरी आदेशों को करने के लिए सबसे पहली पसंद नहीं है । कुछ कमांड के लिए शील को भी देखें जो अलग-अलग लिनक्स कमांड हैं, लेकिन आप शायद सीधे अपनी पायथन स्क्रिप्ट में लागू कर सकते हैं। ओएस लाइब्रेरी में लिनक्स कमांड का एक और विशाल बैच है ; आप इन और अधिक बस पायथन में कर सकते हैं।

    और - बोनस! -- अधिक तेजी से। शेल में प्रत्येक अलग लिनक्स कमांड (कुछ अपवादों के साथ) एक उपप्रकार की तलाश करता है। पायथन shutilऔर osमॉड्यूल का उपयोग करके , आप एक उपप्रकार को कांटा नहीं करते हैं।

  • शेल वातावरण सुविधाएँ। इसमें वह सामान शामिल है जो एक कमांड के वातावरण (वर्तमान निर्देशिका और पर्यावरण चर और क्या नहीं) को सेट करता है। आप इसे सीधे पायथन से प्रबंधित कर सकते हैं।

  • शेल प्रोग्रामिंग सुविधाएँ। यह सभी प्रक्रिया स्थिति कोड की जाँच है, विभिन्न लॉजिक कमांड (यदि, जबकि, आदि) टेस्ट कमांड है और सभी इसके रिश्तेदार हैं। फ़ंक्शन परिभाषा सामान। यह सब बहुत है, पायथन में बहुत आसान है। यह बैश से छुटकारा पाने और पायथन में करने की विशाल जीत में से एक है।

  • सहभागिता सुविधाएँ। इसमें कमांड इतिहास और क्या नहीं शामिल हैं। शेल स्क्रिप्ट लिखने के लिए आपको इसकी आवश्यकता नहीं है। यह केवल मानव संपर्क के लिए है, और स्क्रिप्ट-लेखन के लिए नहीं।

  • शेल फ़ाइल प्रबंधन सुविधाएँ। इसमें पुनर्निर्देशन और पाइपलाइन शामिल हैं। यह पेचीदा मामला है। इसमें से अधिकांश उपप्रकार के साथ किया जा सकता है। लेकिन कुछ चीजें जो शेल में आसान होती हैं, वे पायथन में अप्रिय होती हैं। विशेष रूप से सामान की तरह (a | b; c ) | something >result। यह समानांतर में दो प्रक्रियाओं को चलाता है ( aइनपुट के रूप में आउटपुट के साथ b), एक तीसरी प्रक्रिया के बाद। उस अनुक्रम से आउटपुट समानांतर में चलाया जाता है somethingऔर आउटपुट नाम की एक फ़ाइल में एकत्र किया जाता है result। यह सिर्फ किसी भी अन्य भाषा में व्यक्त करने के लिए जटिल है।

विशिष्ट कार्यक्रमों (awk, sed, grep, आदि) को अक्सर पायथन मॉड्यूल के रूप में फिर से लिखा जा सकता है। ओवरबोर्ड मत जाओ। बदलें जो आपको चाहिए और अपने "grep" मॉड्यूल को विकसित करें। एक अजगर मॉड्यूल लिखना शुरू न करें जो "grep" को प्रतिस्थापित करता है।

सबसे अच्छी बात यह है कि आप इसे चरणों में कर सकते हैं।

  1. AWK और PERL को पायथन से बदलें। बाकी सब कुछ अकेला छोड़ दो।
  2. पाइथन के साथ GREP की जगह देखें। यह थोड़ा अधिक जटिल हो सकता है, लेकिन आपके जीआरपी के संस्करण को आपकी प्रसंस्करण आवश्यकताओं के अनुरूप बनाया जा सकता है।
  3. पायथन छोरों के साथ FIND की जगह पर देखें जो उपयोग करते हैं os.walk। यह एक बड़ी जीत है क्योंकि आप कई प्रक्रियाओं को नहीं अपनाते हैं।
  4. पाइथन लिपियों के साथ सामान्य शेल लॉजिक (लूप, निर्णय आदि) की जगह देखें।

6
लिखा है: "सहभागिता विशेषताएं। इसमें कमांड इतिहास शामिल है और क्या-क्या नहीं। आपको इसकी आवश्यकता नहीं है।" मुझे डर है कि कोई यह नहीं बता सकता कि किसी व्यक्ति को वास्तव में क्या चाहिए या नहीं। शायद वह करता है। इसके अलावा, इन सुविधाओं का एक इंटरैक्टिव शेल में बहुत अर्थ है, उदाहरण के रूप में आइडल और आईपीथॉन के बीच का अंतर।
हेल्टनबिकर

47
मुझे पूरी उम्मीद है कि लोग शेल स्क्रिप्टिंग को पूरी तरह से खोदेंगे। मैं समझता हूं कि हैकिंग व्यावहारिक रूप से * निक्स दुनिया में एक धर्म है, लेकिन मैं ओएस में प्रत्यारोपित किए गए सभी हैकिश वर्कअराउंड की व्याख्या करने की कोशिश करते हुए वास्तव में थक गया हूं। जिस दिन हर कोई अपने स्वयं के संस्करण को रोल करने का फैसला करता है, उस दिन माइक्रोटल्स (awk, sed, top, base, इत्यादि) की नवीनता। जब मैं कल्पना करता हूं कि मैं भद्दे छोटे साधनों पर बर्बाद होने वाले मानव-घंटे की मात्रा की कल्पना करता हूं जो कि युगल द्वारा अच्छी तरह से डिज़ाइन किए गए पाइजन मॉड्यूल द्वारा प्रतिस्थापित किया जा सकता है। :: आह ::
इवान प्लैस

40
मैं @EvanPlaice से असहमत हूं क्योंकि findमेरे पास कई लिपियों का अजगर संस्करण बदसूरत और लंबा और तुलना में अचूक है। बहुत सी बातें होना चाहिए शेल स्क्रिप्ट, कई अन्य लोगों को नहीं करना चाहिए । सब कुछ केवल पायथन या BASH (या कुछ और) में से एक होने की आवश्यकता नहीं है।
माइकबाकॉक

8
@mikebabcock आदर्श रूप से एक पूरा पुस्तकालय होगा जो उन सभी सूक्ष्म उपकरणों को लागू करता है जो मूल * निक्स स्टैक द्वारा उपलब्ध कराए जाते हैं। मिल () और अंतिम () जैसे कार्यों को शामिल किया जाएगा और पाइपों के बजाय, करी और आलसी-लोडिंग का संयोजन इसे सभी को एक साथ जोड़ देगा। क्या POSIX स्क्रिप्टिंग वातावरण होना अच्छा नहीं होगा जो सभी डिस्ट्रोस में एक मानक तरीके से काम करता है? ऐसा कुछ भी मौजूद नहीं है, फिर भी ...
इवान प्लाइस

2
शेल पाइपलाइनों के बारे में बिंदु (जैसे कि (a | b; c ) | something >result) कुछ हद तक इसके द्वारा subprocessshell=True
मामूली

103

हां बिल्कुल :)

इन पुस्तकालयों पर एक नज़र डालें जो आपको कभी भी शेल स्क्रिप्ट लिखने में मदद नहीं करते हैं (प्लम्बम का आदर्श वाक्य)।

इसके अलावा, यदि आप पायथन, कुछ के साथ awk, sed और grep को बदलना चाहते हैं तो मैं pyp सुझाता हूं -

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


Envoy पर भी एक नज़र डालें, जो कि github.com/kennethreitz/envoy का
AllanLRH

57

मैंने अभी-अभी खोजा कि कैसे बैश और आईपाइथन के सर्वश्रेष्ठ भागों को मिलाया जाए। अब तक यह सबप्रोसेस और इतने पर उपयोग करने की तुलना में मेरे लिए अधिक आरामदायक लगता है। आप मौजूदा बैश स्क्रिप्ट के बड़े हिस्सों को आसानी से कॉपी कर सकते हैं और उदाहरण के लिए पाइथन तरीके से त्रुटि से निपटने को जोड़ दें :) और यहाँ मेरा परिणाम है:

#!/usr/bin/env ipython3

# *** How to have the most comfort scripting experience of your life ***
# ######################################################################
#
# … by using ipython for scripting combined with subcommands from bash!
#
# 1. echo "#!/usr/bin/env ipython3" > scriptname.ipy    # creates new ipy-file
#
# 2. chmod +x scriptname.ipy                            # make in executable
#
# 3. starting with line 2, write normal python or do some of
#    the ! magic of ipython, so that you can use unix commands
#    within python and even assign their output to a variable via
#    var = !cmd1 | cmd2 | cmd3                          # enjoy ;)
#
# 4. run via ./scriptname.ipy - if it fails with recognizing % and !
#    but parses raw python fine, please check again for the .ipy suffix

# ugly example, please go and find more in the wild
files = !ls *.* | grep "y"
for file in files:
  !echo $file | grep "p"
# sorry for this nonsense example ;)

सिस्टम शेल कमांड पर IPython डॉक्स देखें और सिस्टम शेल के रूप में इसका उपयोग करें ।


11
अपभ्रंश क्योंकि कुछ विचित्र कारण के लिए, किसी और ने उल्लेख नहीं किया है! खासकर जब से आप उनके आउटपुट को एक चर (लाइनों की सूची) के रूप में filelines = ! cat myfile
सौंप सकते हैं

और आप $varएक शेल कमांड में अजगर चर का उपयोग कर सकते हैं ? वाह। यह स्वीकृत उत्तर होना चाहिए।
चिले दस ब्रिंच

और तुम भी jupyter पुस्तिकाओं के भीतर से उपयोग कर सकते हैं
युवाल Atzmon

44

2015 और पायथन 3.4 के रिलीज के रूप में, अब एक बहुत ही संपूर्ण उपयोगकर्ता-इंटरैक्टिव शेल उपलब्ध है: http://xon.sh/ या https://github.com/scopatz/xonsh

प्रदर्शन वीडियो नहीं दिखा पाइप इस्तेमाल किया जा रहा है, लेकिन वे समर्थन कर रहे हैं जब डिफ़ॉल्ट खोल मोड में है।

बॉनश ('शंख') बैश का अनुकरण करने की बहुत कोशिश करता है, इसलिए जिन चीजों के लिए आपको पहले से ही मांसपेशियों की स्मृति प्राप्त हो गई है, जैसे

env | uniq | sort -r | grep PATH

या

my-web-server 2>&1 | my-log-sorter

अभी भी ठीक काम करेगा।

ट्यूटोरियल काफी लंबा है और कार्यक्षमता की एक महत्वपूर्ण राशि को कवर करने के लिए लगता है जो किसी को आमतौर पर ऐश या बैश प्रॉम्प्ट में उम्मीद होती है:

  • संकलन, मूल्यांकन, और निष्पादन!
  • कमांड हिस्ट्री और टैब कंप्लीटेशन
  • सहायता और Superhelp के साथ ?&??
  • उपनाम और अनुकूलित संकेत
  • निष्पादित कमांड और / या *.xshलिपियों को भी आयात किया जा सकता है
  • लुकअप सहित पर्यावरण चर ${}
  • इनपुट / आउटपुट पुनर्निर्देशन और संयोजन
  • बैकग्राउंड जॉब्स और जॉब कंट्रोल
  • नेस्टिंग सबप्रोसेस, पाइप्स, और कॉपरप्रसेस
  • उपप्रकार-मोड जब कोई आदेश मौजूद होता है, तो पायथन-मोड अन्यथा
  • के साथ $()उपप्रकार, अनचाहे उपप्रजाति के साथ कब्जा कर लिया $[], पायथन मूल्यांकन के साथ@()
  • फ़ाइल नाम Globbing के साथ *या नियमित अभिव्यक्ति फ़ाइल नाम Globbing Backticks के साथ

लेकिन ऐसा क्यों लगता है कि ये सभी जवाब सिर्फ उन लोगों के लिए पहिया को सुदृढ़ कर रहे हैं जो बैश नहीं जानते हैं ? मैं बैश के साथ मध्यम रूप से सहज हो गया हूं और इनमें से हर एक उत्तर ऐसा लगता है कि यह कम लाभ के लिए अधिक काम करेगा। ये उत्तर उन सभी लोगों के उद्देश्य से हैं, जो डरते हैं (या सीखने के लिए समय नहीं बिताना चाहते हैं) क्या मैं सही हूं?
ब्यूटिक बटुक

लगता है कि यह .xshxonsh कोड के साथ फ़ाइलों के लिए एक्सटेंशन का उपयोग करने की आवश्यकता की तरह कुछ नुकसान है : github.com/xonsh/xonsh/issues/2478 । अन्यथा आपको evalxइसे सीधे .pyफाइलों से कॉल करने के लिए उपयोग करना होगा ।
एंड्री

31
  • यदि आप पायथन को शेल के रूप में उपयोग करना चाहते हैं, तो आईपीथॉन पर एक नज़र क्यों नहीं है ? इंटरेक्टिव रूप से भाषा सीखना भी अच्छा है।
  • यदि आप बहुत सारे पाठ हेरफेर करते हैं, और यदि आप पाठ संपादक के रूप में विम का उपयोग करते हैं, तो आप सीधे अजगर में विम के लिए प्लगइन्स भी लिख सकते हैं। बस टाइप करें: "अजगर को मदद करें" विम में और निर्देशों का पालन करें या इस प्रस्तुति पर एक नज़र डालें । कार्यों को लिखना इतना आसान और शक्तिशाली है कि आप सीधे अपने संपादक में उपयोग करेंगे!

8
वहाँ एक IPython प्रोफ़ाइल 'श' कहा जाता है कि दुभाषिया बनाता है बहुत एक कवच की तरह ज्यादा।
ऑटोपेलेक्टिक

3
कुछ समय के लिए ipython 'sh' प्रोफ़ाइल को हटा दिया गया है।
gdw2

>>> परिणाम =! dmesg | grep -i 'usb' #the! ऑपरेटर यह सब करता है
पर्मैफेक्चर

16

शुरुआत में sh, sed, और awk (और मिल जाए, और grep, और ...)। यह अच्छा था। लेकिन जाग एक अजीब सा जानवर हो सकता है और याद रखना मुश्किल है अगर आप इसे अक्सर उपयोग नहीं करते हैं। तब महान ऊंट ने पर्ल बनाया। पर्ल एक सिस्टम एडमिनिस्ट्रेटर का सपना था। यह स्टेरॉयड पर शेल स्क्रिप्टिंग की तरह था। नियमित अभिव्यक्ति सहित पाठ प्रसंस्करण, भाषा का सिर्फ एक हिस्सा था। फिर यह बदसूरत हो गया ... लोगों ने पर्ल के साथ बड़े आवेदन करने की कोशिश की। अब, मुझे गलत मत समझो, पर्ल एक एप्लिकेशन हो सकता है, लेकिन अगर आप वास्तव में सावधान नहीं हैं तो यह गड़बड़ (ऐसा!) हो सकता है। फिर यह सब फ्लैट डेटा व्यवसाय है। यह एक प्रोग्रामर नट्स को चलाने के लिए पर्याप्त है।

पायथन, रूबी, एट अल दर्ज करें। ये वास्तव में बहुत अच्छी सामान्य प्रयोजन की भाषाएं हैं। वे पाठ प्रसंस्करण का समर्थन करते हैं, और इसे अच्छी तरह से करते हैं (हालांकि शायद भाषा के मूल कोर में कसकर नहीं लगाया गया है)। लेकिन वे बहुत अच्छी तरह से बड़े पैमाने पर हैं, और अभी भी दिन के अंत में अच्छा दिखने वाला कोड है। उन्होंने अधिकांश कुछ के लिए बहुत सारे पुस्तकालयों के साथ सुंदर विषम समुदायों को भी विकसित किया है।

अब, पर्ल के प्रति बहुत अधिक नकारात्मकता एक राय का विषय है, और निश्चित रूप से कुछ लोग बहुत साफ पर्ल लिख सकते हैं, लेकिन इसके साथ कई लोगों को इस बारे में शिकायत करना आसान है कि आपत्तिजनक कोड बनाने के लिए आसान है, आपको पता है कि सच्चाई का कुछ अनाज है। प्रश्न वास्तव में तब बन जाता है, क्या आप कभी भी इस भाषा का उपयोग साधारण बैश स्क्रिप्ट प्रतिस्थापन से अधिक के लिए करने जा रहे हैं। यदि नहीं, तो कुछ और पर्ल जानें .. यह उसके लिए बिल्कुल शानदार है। यदि, दूसरी ओर, आप एक ऐसी भाषा चाहते हैं जो आपके साथ बढ़े, जैसा कि आप और अधिक करना चाहते हैं, तो मैं पायथन या रूबी का सुझाव दे सकता हूं।

किसी भी तरह, अच्छी किस्मत!


9

मैं अजगर में भयानक ऑनलाइन पुस्तक गोता सुझाव देते हैं । यह है कि मैंने मूल रूप से भाषा कैसे सीखी।

आपको भाषा की मूल संरचना, और बहुत सारी उपयोगी डेटा संरचनाओं को पढ़ाने से परे, इसमें फ़ाइल हैंडलिंग और बाद के अध्यायों के नियमित भावों और अधिक पर एक अच्छा अध्याय है ।


1
... लिंक का मुख्य मुद्दा केवल उत्तर।
जीन फ़्राँस्वा Fabre


7

पाइथन से प्यार करने का एक कारण यह है कि यह पोसिक्स टूल्स की तुलना में बहुत बेहतर मानकीकृत है। मुझे डबल और ट्रिपल चेक करना है कि प्रत्येक बिट अन्य ऑपरेटिंग सिस्टम के साथ संगत है। लिनक्स सिस्टम पर लिखा गया प्रोग्राम OSX के बीएसडी सिस्टम पर काम नहीं कर सकता है। पायथन के साथ, मुझे सिर्फ यह जांचना है कि लक्ष्य प्रणाली में अजगर का पर्याप्त आधुनिक संस्करण है।

इससे भी बेहतर, मानक पायथन में लिखा गया एक प्रोग्राम विंडोज पर भी चलेगा!


1
"मानक पायथन में लिखा गया एक प्रोग्राम विंडोज पर भी चलेगा": कोई मज़ाक नहीं?
जीन फ़्राँस्वा Fabre

6

मैं अनुभव के आधार पर अपनी राय यहां दूंगा:

खोल के लिए:

  • शेल बहुत आसानी से केवल-पढ़ने के लिए कोड स्पॉन कर सकता है। इसे लिखें और जब आप इसे वापस आते हैं, तो आप कभी भी यह पता नहीं लगाएंगे कि आपने फिर से क्या किया। इसे पूरा करना बहुत आसान है।
  • शेल पाइपों के साथ एक पंक्ति में पाठ प्रसंस्करण, विभाजन आदि का एक बहुत कुछ कर सकता है।
  • जब यह विभिन्न प्रोग्रामिंग भाषाओं में कार्यक्रमों की कॉल को एकीकृत करने की बात आती है तो यह सबसे अच्छी गोंद भाषा है।

अजगर के लिए:

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

मैं आमतौर पर ज्यादातर चीजों के लिए बैश चुनता हूं, लेकिन जब मेरे पास कुछ ऐसा होता है जो खिड़कियों की सीमाओं को पार करना चाहिए, तो मैं सिर्फ अजगर का उपयोग करता हूं।


4

pythonpy एक ऐसा उपकरण है जो awk और sed से कई सुविधाओं को आसान पहुँच प्रदान करता है, लेकिन अजगर सिंथेटिक्स का उपयोग कर रहा है:

$ echo me2 | py -x 're.sub("me", "you", x)'
you2

3

मैंने अर्ध-लंबी शेल स्क्रिप्ट (300-500 लाइनें) और पायथन कोड बनाया है जो समान कार्यक्षमता करता है। जब कई बाहरी आदेशों को निष्पादित किया जा रहा है, मुझे लगता है कि शेल का उपयोग करना आसान है। पाठ हेरफेर बहुत होने पर पर्ल भी एक अच्छा विकल्प है।


3

इस विषय पर शोध करते हुए, मुझे यह प्रूफ-ऑफ-कॉन्सेप्ट कोड ( http://jlebar.com/2010/2/1/Replacing_Bash.html पर एक टिप्पणी के माध्यम से ) मिला, जो आपको पायथन में शेल-जैसी पाइपलाइन लिखने देता है ट्रिक्स सिंटैक्स, और मौजूदा सिस्टम टूल्स का लाभ उठाना जहाँ वे समझ में आते हैं ":

for line in sh("cat /tmp/junk2") | cut(d=',',f=1) | 'sort' | uniq:
    sys.stdout.write(line)

2

आपका सबसे अच्छा दांव एक उपकरण है जो विशेष रूप से आपकी समस्या के लिए तैयार है। यदि यह पाठ फ़ाइलों को संसाधित कर रहा है, तो Sed, Awk और Perl शीर्ष दावेदार हैं। अजगर एक सामान्य प्रयोजन की गतिशील भाषा है। किसी भी सामान्य प्रयोजन की भाषा के रूप में, फ़ाइल-हेरफेर के लिए समर्थन है, लेकिन यह नहीं है कि यह मूल उद्देश्य क्या है। मैं पायथन या रूबी पर विचार करूंगा अगर मुझे विशेष रूप से एक गतिशील भाषा की आवश्यकता थी।

संक्षेप में, सेड और ऑक को वास्तव में अच्छी तरह से सीखें, साथ ही अन्य सभी उपहार जो आपके निक्स के स्वाद के साथ आते हैं (सभी बैश बिल्ट-इन, जीआरपी, ट्र और इसके आगे)। यदि यह टेक्स्ट फ़ाइल प्रसंस्करण है जिसमें आप रुचि रखते हैं, तो आप पहले से ही सही सामान का उपयोग कर रहे हैं।


2

आप शेल्पी लाइब्रेरी के साथ बैश के बजाय अजगर का उपयोग कर सकते हैं ।

यहाँ एक उदाहरण है जो गिथूब से पायथन उपयोगकर्ता का अवतार डाउनलोड करता है:

import json
import os
import tempfile

# get the api answer with curl
answer = `curl https://api.github.com/users/python
# syntactic sugar for checking returncode of executed process for zero
if answer:
    answer_json = json.loads(answer.stdout)
    avatar_url = answer_json['avatar_url']

    destination = os.path.join(tempfile.gettempdir(), 'python.png')

    # execute curl once again, this time to get the image
    result = `curl {avatar_url} > {destination}
    if result:
        # if there were no problems show the file
        p`ls -l {destination}
    else:
        print('Failed to download avatar')

    print('Avatar downloaded')
else:
    print('Failed to access github api')

जैसा कि आप देख सकते हैं, गंभीर उच्चारण (`) प्रतीक के अंदर सभी अभिव्यक्तियों को शेल में निष्पादित किया जाता है। और पायथन कोड में, आप इस निष्पादन के परिणामों को पकड़ सकते हैं और उस पर कार्रवाई कर सकते हैं। उदाहरण के लिए:

log = `git log --pretty=oneline --grep='Create'

यह लाइन पहले git log --pretty=oneline --grep='Create'शेल में निष्पादित होगी और फिर परिणाम को लॉग वेरिएबल में असाइन करेगी । परिणाम में निम्नलिखित गुण हैं:

stdout निष्पादित की प्रक्रिया के stdout से पूरे पाठ

stderr निष्पादित की प्रक्रिया के stderr से पूरे पाठ

returncode निष्पादन की returncode

यह लाइब्रेरी का सामान्य अवलोकन है, उदाहरणों के साथ अधिक विस्तृत विवरण यहां पाया जा सकता है


1

यदि आपका टेक्स्टफाइल हेरफेर आमतौर पर एक बार होता है, तो संभवतः शेल-प्रॉम्प्ट पर किया जाता है, तो आपको अजगर से बेहतर कुछ भी नहीं मिलेगा।

दूसरी ओर, यदि आपको आमतौर पर एक ही (या समान) कार्य को बार-बार करना पड़ता है, और आपको ऐसा करने के लिए अपनी स्क्रिप्ट लिखनी है, तो अजगर महान है - और आप आसानी से अपना खुद का पुस्तकालय बना सकते हैं (आप कर सकते हैं) शेल स्क्रिप्ट के साथ भी, लेकिन यह अधिक बोझिल है)।

एक बहुत ही सरल उदाहरण एक भावना पाने के लिए।

import popen2
stdout_text, stdin_text=popen2.popen2("your-shell-command-here")
for line in stdout_text:
  if line.startswith("#"):
    pass
  else
    jobID=int(line.split(",")[0].split()[1].lstrip("<").rstrip(">"))
    # do something with jobID

जाँच भी करें sys और getopt मॉड्यूल, वे पहले हैं जिनकी आपको आवश्यकता होगी।


1

मैंने PyPI: ez पर एक पैकेज प्रकाशित किया है । इसे स्थापित करने के लिए
उपयोग करें pip install ez

इसने आम कमांड्स को शेल में पैक किया है और अच्छी तरह से मेरा लीवर मूल रूप से शेल के समान सिंटैक्स का उपयोग करता है। उदाहरण के लिए, cp (स्रोत, गंतव्य) फ़ाइल और फ़ोल्डर दोनों को संभाल सकता है! (shutil.copy shutil.copytree का रैपर और यह तय करता है कि कब किसे इस्तेमाल करना है)। और भी अच्छी तरह से, यह आर की तरह वैश्वीकरण का समर्थन कर सकता है!

एक और उदाहरण: कोई os.walk, fls (पथ, regex) का उपयोग नियमित रूप से फ़ाइलों को खोजने और नियमित अभिव्यक्ति के साथ फ़िल्टर करने के लिए करता है और यह फ़ुलपैथ के साथ या उसके बिना फ़ाइलों की सूची देता है

अंतिम उदाहरण: आप उन्हें बहुत ही सरलता से लिखने के लिए संयोजित कर सकते हैं:
files = fls('.','py$'); cp(files, myDir)

निश्चित रूप से इसे देखें! इसे लिखने / सुधारने में मुझे सैकड़ों घंटे का समय लगा है!


1
दिखता रोचक, लेकिन मैं पर अस्वरूपित डॉक्स के माध्यम से तोड़ने नहीं कर सकते pypi.python.org/pypi/ez , खेद ...
ग्रेग Dubicki
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.