Optparse के बजाय क्यों argparse का उपयोग करें?


290

मैंने देखा कि पायथन 2.7 प्रलेखन में अभी तक एक और कमांड-लाइन पार्सिंग मॉड्यूल शामिल है। इसके अलावा getoptऔर optparseअब हमारे पास है argparse

अभी तक एक और कमांड-लाइन पार्सिंग मॉड्यूल क्यों बनाया गया है? इसके बजाय मुझे इसका उपयोग क्यों करना चाहिए optparse? क्या ऐसी नई सुविधाएँ हैं जिनके बारे में मुझे पता होना चाहिए?


8
या शायद कोई भी उपयोग न करें क्योंकि 2012 के बाद से पाइथन के पास डॉकॉप्ट नामक तर्क पार्सिंग के लिए एक आसान, शक्तिशाली और वास्तव में अच्छा मॉड्यूल है। docopt.org
ndemou

1
क्लिक करें यह ऑप्टपर्स के आसपास आवरण है।
अमित त्रिपाठी

जवाबों:


324

अजगर के रूप में 2.7, optparseपदावनत किया जाता है, और भविष्य में उम्मीद से दूर हो जाएगा।

argparseइसके मूल पृष्ठ ( https://code.google.com/archive/p/argparse/ ) पर सूचीबद्ध सभी कारणों से बेहतर है :

  • स्थिति संबंधी तर्कों को संभालना
  • उप-आदेशों का समर्थन करना
  • वैकल्पिक विकल्प की अनुमति देता है जैसे उपसर्ग +और/
  • शून्य-या-अधिक और एक-या-अधिक शैली तर्क को संभालना
  • अधिक जानकारीपूर्ण उपयोग संदेश तैयार करना
  • कस्टम प्रकार और कार्यों के लिए बहुत सरल इंटरफ़ेस प्रदान करना

अधिक जानकारी PEP 389 में भी है , जो वाहन है जिसके द्वारा argparseइसे मानक पुस्तकालय में बनाया गया है।


18
कस्टम प्रकारों के लिए बहुत सरल इंटरफ़ेस ... लेकिन कुल मिलाकर अधिक जटिल इंटरफ़ेस। मैं वास्तव में आश्चर्य क्यों मैं भी, optparse में स्विच क्योंकि ऐसा drumroll getopt जाएगा रहना । हाँ, उस डायनासोर के लिए कोई वंचना नहीं है। Sheeesh।
जर्गेन ए। एरहार्ड

4
optparseपीईपी में "शुद्धता" का उल्लेख बाद में तर्क देता है कि इसे जोड़ने के लिए यह कितना जटिल है कि यह ध्वनि की तरह है कि इसे चट्टान की तरह लचीला (खराब) कोडित किया गया था।
निक टी

1
Subcommands इंटरफ़ेस खराब है। डिफ़ॉल्ट आउटपुट उपयोगी नहीं है और इसे बदलना कठिन है।
अनातोली टेकटोनिक

ध्यान दें कि code.google.com कुछ दिनों में रखरखाव पर जाएगा। अधिक विवरण के साथ अंतर यहां उपलब्ध हैं: argparse.googlecode.com/svn/trunk/doc/argparse-vs-optparse.html
जीन-फ्रेंकोइस टी।

63

मुझे ऑप्टपर्स के बजाय इसका उपयोग क्यों करना चाहिए? क्या उनकी नई विशेषताओं के बारे में मुझे पता होना चाहिए?

@ निकोलस के जवाब में यह अच्छी तरह से शामिल है, मुझे लगता है, लेकिन अधिक "मेटा" सवाल नहीं है जो आप शुरू करते हैं:

अभी तक एक और कमांड-लाइन पार्सिंग मॉड्यूल क्यों बनाया गया है?

यह दुविधा नंबर एक है जब किसी भी उपयोगी मॉड्यूल को मानक पुस्तकालय में जोड़ा जाता है: आप क्या करते हैं जब एक काफी बेहतर है, लेकिन पीछे-असंगत, उसी तरह की कार्यक्षमता प्रदान करने का तरीका उभरता है?

या तो आप पुराने और भर्ती किए गए तरीके से पार करते हैं (आमतौर पर जब हम जटिल पैकेजों के बारे में बात कर रहे होते हैं: asyncore बनाम ट्विस्टेड, tkinter बनाम wx या Qt, ...) या आप एक ही काम करने के लिए कई असंगत तरीकों के साथ समाप्त होते हैं (XML parsers, IMHO, कमांड-लाइन पार्सर की तुलना में इसका एक बेहतर उदाहरण है - लेकिन emailइसी तरह के मुद्दों से निपटने के लिए असंख्य पुराने तरीके बनाम पैकेज या तो बहुत दूर नहीं है; ;-)।

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

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


माना जाता है कि, आप 2.7 से पहले python स्थापनाओं के लिए argparse.py को शामिल कर सकते हैं और पीछे-असंगत परिवर्तनों के बारे में चिंता नहीं कर सकते। ट्रैक करने के लिए अतिरिक्त बात, लेकिन यह अभी भी मानक लाइब्रेरी के बाहर argparse.googlecode.com पर बनी हुई है
एहतेश चौधरी

2
Argparse केवल कुछ (आला?) उपयोगों के लिए पर्याप्त रूप से बेहतर है। यह वास्तव में पूर्ण शब्दों में बेहतर नहीं है, यह अलग है । यह उन चीजों को कर सकता है जो ऑप्टपर्स नहीं कर सकते हैं, लेकिन इसमें रिग्रेशन भी हैं। एक उदाहरण मैं बस में चला गया: Optparse संभाला "-" डिफ़ॉल्ट रूप से (यकीन नहीं कि यह वही किया जाना चाहिए था) जबकि argparse को इसका कुछ भी पता नहीं है।
जुरगेन ए। इरहर

उपरोक्त टिप्पणी में आने वाले किसी भी व्यक्ति के लिए, आप ने उपसर्ग और नाम निर्धारित किया है, और अधिकांश पार्सर के रूप में लिखा गया है parser.add_argument('--long-opt', '-l',...); '-' को आसानी से संभाला जाता है, और हालाँकि आप इसे पसंद करते हैं।
सिल्वरबैकनेट

37

पायथन जोड़ के लिए तर्क के लिए सबसे अच्छा स्रोत इसका PEP होगा: PEP 389: argparse - नई कमांड लाइन पार्सिंग मॉड्यूल , विशेष रूप से, जिस अनुभाग का हकदार है, क्यों नहीं मिल रहा है और पर्याप्त रूप से वैकल्पिक नहीं है?


18

ब्लॉक पर नए बच्चे भी हैं!

  • पहले से ही वर्णित अपचयन के अलावा । [प्रयोग नहीं करें]
  • argparse का भी उल्लेख किया गया था, जो कि उन लोगों के लिए एक समाधान है जो बाहरी देयताओं को शामिल नहीं करना चाहते हैं।
  • docopt एक बाहरी परिवाद है, जो देखने में लायक है, जो आपके इनपुट के लिए पार्सर के रूप में प्रलेखन स्ट्रिंग का उपयोग करता है।
  • क्लिक भी बाहरी परिवाद है और तर्कों को परिभाषित करने के लिए सज्जाकारों का उपयोग करता है। (मेरा स्रोत अनुशंसा करता है: क्यों क्लिक करें )
  • python-inquirer चयन पर ध्यान केंद्रित उपकरण और Inquirer.js ( रेपो ) के आधार पर

आप एक अधिक गहराई से तुलना की जरूरत है कृपया पढ़ें इस और आप का उपयोग कर खत्म हो सकता है docopt या क्लिक कर । काइल Purdon के लिए धन्यवाद!


4
जबकि यह एक सार्थक टिप्पणी है, यह अभी भी एक उत्तर से अधिक टिप्पणी है .. कोई डाउनवोट नहीं है, लेकिन मेरे लिए कोई उत्थान नहीं है! लेख के बहुमूल्य सारांश के साथ अपने उत्तर का विस्तार करके इसे वास्तविक उत्तर बनाएं
Stefano

1
मैंने अपने लिंक के सारांश को शामिल करने की कोशिश की मुझे आशा है कि अब यह एक अच्छा स्टैकओवरफ़्लो उत्तर के लायक है।
Lony

6

पहले तो मैं ऑप्टर्पर से आर्गपार्स में जाने के लिए @fmark के रूप में अनिच्छुक था, क्योंकि:

  1. मुझे लगा कि अंतर इतना बड़ा नहीं था।
  2. कुछ VPS अभी भी डिफ़ॉल्ट रूप से अजगर 2.6 प्रदान करता है।

तब मैंने इस दस्तावेज़ को देखा, विशेषकर सार्थक सहायता संदेश उत्पन्न करने के बारे में बात करते समय, बेहतर प्रदर्शन संदेश: http://argparse.googlecode.com/svn/trunk/doc/argparse-vs-optionse.html

और फिर मैंने @ नीचोल द्वारा " argparse बनाम ऑप्टपर्स " देखा , यह कहते हुए कि हम अजगर <2.7 में उपलब्ध हो सकते हैं (हां, मुझे यह पहले नहीं पता था।)

अब मेरी दो चिंताओं पर ध्यान दिया गया है। मैंने यह उम्मीद करते हुए लिखा कि यह समान मानसिकता वाले दूसरों की मदद करेगा।

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