2011-12-07 8 views
5

मेरा आवेदन एक विशेष फ़ाइल तुलना उपयोगिता है और स्पष्ट रूप से यह केवल एक फ़ाइल की तुलना करने के लिए समझ में नहीं आता है, इसलिए nargs='+' काफी उपयुक्त नहीं है।पाइथन 2.7 में तर्क कर सकते हैं कम से कम दो तर्कों की आवश्यकता के लिए कहा जा सकता है?

nargs=N केवल अधिकतम N तर्कों को छोड़ देता है, लेकिन मुझे उनमें से कम से कम दो होने तक तर्कों की अनंत संख्या स्वीकार करने की आवश्यकता है।

+0

इसके अलावा http://stackoverflow.com/quest पर एक नजर है आयनों/4194948/अजगर-argparse-वहाँ एक तरह से करने के लिए निर्दिष्ट एक रेंज में nargs है-। इससे मदद टेक्स्ट में गड़बड़ (या आसपास के साथ गड़बड़) किए बिना और अधिक लचीलापन की अनुमति मिलती है। – Evert

उत्तर

5

आप कुछ इस तरह से काम नहीं किया जा सका:

import argparse 

parser = argparse.ArgumentParser(description = "Compare files") 
parser.add_argument('first', help="the first file") 
parser.add_argument('other', nargs='+', help="the other files") 

args = parser.parse_args() 
print args 

जब मैं -h के साथ इस चलाने मैं:

usage: script.py [-h] first other [other ...] 

Compare files 

positional arguments: 
    first  the first file 
    other  the other files 

optional arguments: 
    -h, --help show this help message and exit 

जब मैं यह केवल एक तर्क के साथ चलाने के लिए, यह काम नहीं करेगा :

usage: script.py [-h] first other [other ...] 
script.py: error: too few arguments 

लेकिन दो या दो से अधिक तर्क ठीक हैं। तीन तर्कों के साथ यह प्रिंट:

Namespace(first='one', other=['two', 'three']) 
17

लघु जवाब आपको लगता है कि क्योंकि nargs की तरह कुछ का समर्थन नहीं करता नहीं कर सकता है '2 +'।

parser = argparse.ArgumentParser(usage='%(prog)s [-h] file file [file ...]') 
parser.add_argument('file1', nargs=1, metavar='file') 
parser.add_argument('file2', nargs='+', metavar='file', help=argparse.SUPPRESS) 
namespace = parser.parse_args() 
namespace.file = namespace.file1 + namespace.file2 

चाल है कि आप की जरूरत है::

लांग जवाब आप वैकल्पिक हल कर सकते हैं कुछ इस तरह का उपयोग कर वह यह है कि

  • उपयोग usage आप पार्सर को उपयोग के स्ट्रिंग के मालिक हैं प्रदान करने के लिए
  • सहायता स्ट्रिंग
  • में किसी भिन्न नाम के साथ तर्क प्रदर्शित करने के लिए metavar का उपयोग करेंका उपयोग करें 10 में से एक चर के लिए मदद को प्रदर्शित करने से बचने के लिए
  • मर्ज दो अलग चर सिर्फ Namespace उद्देश्य यह है कि पार्सर रिटर्न

उपरोक्त उदाहरण नीचे दी गई सहायता स्ट्रिंग का उत्पादन करने के लिए एक नई विशेषता जोड़कर:

usage: test.py [-h] file file [file ...] 

positional arguments: 
    file 

optional arguments: 
    -h, --help show this help message and exit 

और अभी भी असफल हो जायेगी जब कम से कम दो तर्क पारित कर रहे हैं:

$ python test.py arg 
usage: test.py [-h] file file [file ...] 
test.py: error: too few arguments 
संबंधित मुद्दे