मुझे लगता है कि यह है कि प्राप्त करने के लिए (एक अच्छा सहायता संदेश सहित), जबकि केवल मानक argparse फ़ंक्शन का उपयोग बहुत मुश्किल है: यहाँ दो रन कर रहे हैं। तर्कों को पार करने के बाद भी आप आसानी से इसका परीक्षण कर सकते हैं। आप उपन्यास में या तो अतिरिक्त आवश्यकताओं का वर्णन कर सकते हैं। ध्यान दें कि विकल्पों के रूप में संख्याओं का उपयोग करना असामान्य है, मुझे dest = 'two' का उपयोग करना था, क्योंकि args.2 वैध वाक्यविन्यास नहीं है।
#!/usr/bin/env python
import argparse
parser = argparse.ArgumentParser(
description='bla bla',
epilog='Note: arguments -3 and -4 are required when -2 is missing')
parser.add_argument('-2', dest='two', action='store_true')
parser.add_argument('-3', dest='three')
parser.add_argument('-4', dest='four')
parser.add_argument('-5', dest='five')
args = parser.parse_args()
if not args.two and (args.three is None or args.four is None):
parser.error('arguments -3 and -4 are required when -2 is missing')
print 'Good:', args
इन परिणामों के साथ
:
[~]: ./test.py -h
usage: test.py [-h] [-2] [-3 THREE] [-4 FOUR] [-5 FIVE]
bla bla
optional arguments:
-h, --help show this help message and exit
-2
-3 THREE
-4 FOUR
-5 FIVE
Note: arguments -3 and -4 are required when -2 is missing
[~]: ./test.py -2
Good: Namespace(five=None, four=None, three=None, two=True)
[~]: ./test.py -3 a -4 b
Good: Namespace(five=None, four='b', three='a', two=False)
[~]: ./test.py -3 a
usage: test.py [-h] [-2] [-3 THREE] [-4 FOUR] [-5 FIVE]
test.py: error: arguments -3 and -4 are required when -2 is missing
[~]: ./test.py -2 -5 c
Good: Namespace(five='c', four=None, three=None, two=True)
[~]: ./test.py -2 -3 a
Good: Namespace(five=None, four=None, three='a', two=True)
स्रोत
2013-08-02 21:29:40
एक subparser -2 कि वैकल्पिक के रूप में अन्य आदेशों प्रतिकृति पर keyed करें। शीर्ष स्तर पर, लिंक -3 और -4 एक साथ। – Jiminion
'-' से शुरू होने वाले उपपरर आदेशों का उपयोग करना मुश्किल हो सकता है। '-2' काम कर सकता है, लेकिन' -t' या '--two' ऐसा नहीं होगा क्योंकि वे विकल्प की तरह दिखते हैं। लेकिन यदि '-3' को तर्क के रूप में परिभाषित किया गया है, तो' -2' अब उपपरसर कमांड (या एक विकल्प) के रूप में काम नहीं करता है। – hpaulj