2012-08-01 17 views
16

मैं अजगर में एक निम्न कोड है:argparse तर्क नेस्टिंग

parser = argparse.ArgumentParser(description='Deployment tool') 
group = parser.add_mutually_exclusive_group() 
group.add_argument('-a', '--add', dest='name_to_add', help='Add a new group or a role to existing group') 
group.add_argument('-u', '--upgrade', dest='name_to_upgrade', help='Upgrade a group with the new version') 
parser.add_argument('--web_port', help='Port of the WEB instance that is being added to the group') 

मेरे समस्या "--web_port" विकल्प के साथ है। मैं केवल "-a" विकल्प के साथ इस विकल्प को जोड़ने में सक्षम होना चाहता हूं लेकिन "-u" के साथ नहीं।

I चलाने में सक्षम होने के लिए चाहते हैं: "python my_script.py -a name --web_port = XXXX"। "अजगर my_script.py -u नाम --web_port = XXXX"

मैं क्रम में मेरी कोड कैसे बदलना चाहिए यह इस चलाने के लिए सक्षम होने के लिए:

मैं नहीं चाहता कि चलाने के लिए सक्षम होना चाहता हूँ मार्ग?

धन्यवाद, अरशवस्की अलेक्जेंडर।

+0

[पाइथन, Argparse: संभावित पैरामीटर सक्षम करें जब किसी अन्य को निर्दिष्ट किया गया है] सक्षम करें] (http://stackoverflow.com/questions/11455218/python-argparse-enable-input-parameter-when-another-one- निर्दिष्ट किया गया है) – mgilson

उत्तर

27

-a और -u होने के बजाय विकल्प हो, तो आप उन्हें उप-आदेश बनाना चाहेंगे। आप

my_script.py upgrade name --web_port=1234 

चलाने प्रयास करें यदि आप अपरिचित तर्क के लिए एक त्रुटि मिल जाएगा

parser = argparse.ArgumentParser(description='Deployment tool') 
subparsers = parser.add_subparsers() 

add_p = subparsers.add_parser('add') 
add_p.add_argument("name") 
add_p.add_argument("--web_port") 
... 

upg_p = subparsers.add_parser('upgrade') 
upg_p.add_argument("name") 
... 

"-:

python my_script.py add name --web_port=XXXX 
python my_script.py upgrade name 

कुछ की तरह: तो फिर, --web-portadd subcommand का एक विकल्प बनाने -web_port "।

इसी तरह, अगर आप

my_script.py add name upgrade 

कोशिश आप अपरिचित तर्क "अपग्रेड" के लिए एक त्रुटि मिल जाएगा, के बाद से आप केवल 'जोड़ें' subcommand के लिए एक एकल स्थितीय तर्क को परिभाषित किया।

दूसरे शब्दों में, उपसमूह पूरी तरह से पारस्परिक रूप से अनन्य हैं। केवल छोटे वार्ट यह है कि आपको प्रत्येक सबपरसर में "नाम" स्थितित्मक पैरामीटर जोड़ने की आवश्यकता है।

+0

तेज प्रतिक्रिया के लिए धन्यवाद। लेकिन मुझे परस्पर अनन्य होने के लिए जोड़ने और अपग्रेड की आवश्यकता है। – alexarsh

+1

उपमहाद्वीप के रूप में, वे होंगे। 'python my_script.py नाम --web_port = XXX अपग्रेड 'जोड़ें, उदाहरण के लिए,' अपग्रेड 'उप-आदेश के आमंत्रण को' एड 'उपसमंद के लिए स्थितिगत तर्क के रूप में' अपग्रेड 'का इलाज करेगा। (मुझे लगता है; मैंने थोड़ी देर में उप-सामग्रियों को लागू नहीं किया है।) – chepner

+1

बहुत बहुत धन्यवाद। मुझे इसी की जरूरत थी। – alexarsh

संबंधित मुद्दे