2012-12-27 21 views
6

मेरा लक्ष्य एक पाइथन कमांड लाइन उपयोगिता लिखना है जो Argparse का उपयोग कर रहा है जिसमें कई कमांड हैं जिनमें प्रत्येक के पास आवश्यक इनपुट के अलग-अलग सेट हैं।पायथन और Argparse: पहले तर्क के आधार पर आवश्यक अतिरिक्त तर्क कैसे बदलना है?

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

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

उदाहरण के लिए, यह एक समान मामला है:

एक स्थितीय तर्क नहीं है, पशु

विकल्प जानवर के लिए बिल्ली, छिपकली, मछली

बिल्ली के लिए, तर्क पंजे, मूंछ कर रहे हैं, पंजे

छिपकली, तर्क scale_color, favorite_food

मछली के लिए आवश्यक हैं के लिए आवश्यक हैं, तर्क water_type मैं एस

हम अनौपचारिक अभ्यास का उपयोग किए बिना-साथ प्रत्येक अलग-अलग पशु मूल्य के लिए आवश्यक अतिरिक्त तर्क चाहते हैं।

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

मैं की तरह कुछ कर सकता है:

valid_commands = ['a','b','c','d','e','f','g'] 
parser.add_argument('command', choices = valid_commands) 
parser.add_argument('inputs', nargs = '*') 

लेकिन तब मैं प्रत्येक आदेश चुनाव के लिए अतिरिक्त तर्क पर अच्छा इनपुट के चेक नहीं है।

क्या ऐसा कुछ सामान्य तरीका है? निश्चित रूप से यह एक उपयोगिता लिखना काफी आम है जिसमें कई संभावित आदेश हैं, और प्रत्येक के लिए अलग-अलग आवश्यक तर्क हैं। मैन्युअल जांच और दस्तावेज़ीकरण में मदद करके मुझे निश्चित रूप से अधिकतर आवश्यकताएं मिल सकती हैं, लेकिन यह ऐसी चीज है जो मैं संभवतः पर्याप्त समय तक करूँगा कि इसे पहली कोशिश पर सही तरीके से प्राप्त करने के लायक है।

पढ़ने के लिए धन्यवाद और मुझे बताएं कि क्या मैं जानकारी प्रदान करने में मदद कर सकता हूं।

उत्तर

7

ऐसा लगता है कि उपपरक्षक क्या हैं?

http://docs.python.org/dev/library/argparse.html#argparse.ArgumentParser.add_subparsers

+0

लिंक रॉस के लिए धन्यवाद। मैं अभी इसे देख लूंगा। –

+0

ऐसा लगता है कि सबपरर्स जो मैं खोज रहा था। कार्यान्वयन के अनुसार वास्तव में क्या होने की आवश्यकता है, यह पता लगाने में थोड़ा सा लगेगा, लेकिन यह निश्चित रूप से मेरी समस्या हल करता है। –