संपादित करें: कभी भी ध्यान न दें। क्योंकि argparse
group.add_argument
का आह्वान करते समय एक विकल्प बनाने का भयानक विकल्प बनाता है। यह मेरी डिजाइन पसंद नहीं होगी। इस प्रकार
# exclusivegroups.py
import conflictsparse
parser = conflictsparse.ConflictsOptionParser()
a_opt = parser.add_option('-a')
b_opt = parser.add_option('-b')
c_opt = parser.add_option('-c')
d_opt = parser.add_option('-d')
import itertools
compatible_opts1 = (a_opt, b_opt)
compatible_opts2 = (c_opt, d_opt)
exclusives = itertools.product(compatible_opts1, compatible_opts2)
for exclusive_grp in exclusives:
parser.register_conflict(exclusive_grp)
opts, args = parser.parse_args()
print "opts: ", opts
print "args: ", args
जब हम यह आह्वान, हम देख सकते हैं कि हम वांछित प्रभाव मिलता है: आप इस सुविधा के लिए बेताब हैं, तो आप ConflictsOptionParser साथ यह कर कोशिश कर सकते हैं।
$ python exclusivegroups.py -a 1 -b 2
opts: {'a': '1', 'c': None, 'b': '2', 'd': None}
args: []
$ python exclusivegroups.py -c 3 -d 2
opts: {'a': None, 'c': '3', 'b': None, 'd': '2'}
args: []
$ python exclusivegroups.py -a 1 -b 2 -c 3
Usage: exclusivegroups.py [options]
exclusivegroups.py: error: -b, -c are incompatible options.
चेतावनी संदेश आपको सूचित नहीं है कि '-a'
और '-b'
दोनों '-c'
के साथ असंगत हैं, फिर भी एक और अधिक उपयुक्त त्रुटि संदेश तैयार किया जा सकता है। नीचे पुराना, गलत जवाब।
पुराने संपादित करें:[यह संपादन गलत है, हालांकि नहीं यह सिर्फ एक आदर्श दुनिया हो सकता है अगर argparse
इस तरह से काम किया है?] मेरे पिछले जवाब वास्तव में गलत थी, तो आप argparse
के साथ ऐसा करने में सक्षम होना चाहिए प्रति पारस्परिक अनन्य विकल्पों में एक समूह निर्दिष्ट करके। हम प्रक्रिया को सामान्यीकृत करने के लिए itertools
का भी उपयोग कर सकते हैं। और इसे बनाएं ताकि हमें सभी संयोजनों को स्पष्ट रूप से टाइप न करना पड़े:
import itertools
compatible_opts1 = ('-a', '-b')
compatible_opts2 = ('-c', '-d')
exclusives = itertools.product(compatible_opts1, compatible_opts2)
for exclusive_grp in exclusives:
group = parser.add_mutually_exclusive_group()
group.add_argument(exclusive_grp[0])
group.add_argument(exclusive_grp[1])
http://bugs.python.org/issue10984 में एक पैच है जो आपको एक से अधिक परस्पर अनन्य समूह में तर्क देने देता है। ऐसा करना एक आसान बदलाव है। ओवरलैपिंग समूहों के साथ सार्थक उपयोग का निर्माण करना अधिक शामिल है। – hpaulj