कैसे parser.parse_known_args()
विधि का उपयोग करने के बारे में और फिर मौजूद है --lport
और --rport
यदि आवश्यक हो तो args जोड़ने के रूप में --prox
।
# just add --prox arg now
non_int = argparse.ArgumentParser(description="stackoverflow question",
usage="%(prog)s [-h] [--prox --lport port --rport port]")
non_int.add_argument('--prox', action='store_true',
help='Flag to turn on proxy, requires additional args lport and rport')
opts, rem_args = non_int.parse_known_args()
if opts.prox:
non_int.add_argument('--lport', required=True, type=int, help='Listen Port.')
non_int.add_argument('--rport', required=True, type=int, help='Proxy port.')
# use options and namespace from first parsing
non_int.parse_args(rem_args, namespace = opts)
यह भी ध्यान रखें कि आप opts
दूसरी बार शेष तर्कों को पार्स करते समय पहली पार्सिंग के बाद उत्पन्न नामस्थान की आपूर्ति कर सकते हैं । इस तरह, अंत में, सभी पार्सिंग किए जाने के बाद, आपके पास सभी विकल्पों के साथ एक एकल नाम स्थान होगा।
कमियां:
- यदि
--prox
मौजूद नहीं है तो अन्य दो निर्भर विकल्प भी नाम स्थान में मौजूद नहीं हैं। यद्यपि आपके उपयोग-मामले के आधार पर, यदि --prox
मौजूद नहीं है , तो अन्य विकल्पों के साथ जो होता है वह अप्रासंगिक है।
- उपयोग संदेश को संशोधित करने की आवश्यकता है क्योंकि पार्सर पूर्ण संरचना को नहीं जानता है
--lport
और --rport
मदद संदेश में नहीं दिखा