2012-02-07 14 views
68

पायथन में, मैं समझता हूं कि स्क्रिप्ट में int और str तर्क कैसे जोड़े जा सकते हैं।स्क्रिप्ट के लिए बूलियन तर्क

parser=argparse.ArgumentParser(description="""Mydescription""") 
parser.add_argument('-l', type=str, default='info', help='String argument') 
parser.add_argument('-dt', type=int, default ='', help='int argument') 

बूलियन के लिए यह क्या है?

असल में मैं अपनी स्क्रिप्ट में ध्वज पास करना चाहता हूं जो स्क्रिप्ट को बताएगा कि कोई विशिष्ट कार्यवाही करना है या नहीं।

+2

के साथ एक --option क्या 'कार्रवाई के साथ गलत क्या है एक ही dest मूल्य के साथ करने के लिए परस्पर अनन्य तर्क चूसना गया है = 'store_true ' '? –

+0

आप बूलियन के साथ क्या व्यवहार चाहते हैं? (कहें, '-v true' और '-v false' के साथ?) – kennytm

उत्तर

133

आप उपयोग कर सकते हैं या तो actionstore_true साथ | store_false, या आप एक int का उपयोग कर सकते हैं और निहित कास्टिंग को एक बूलियन मान की जांच कर सकते हैं।

action का उपयोग करके, आप --foo=true और --foo=false तर्क पास नहीं करेंगे, अगर आप इसे सत्य पर सेट करना चाहते हैं तो आप इसे बस शामिल करेंगे।

python myProgram.py --foo 

वास्तव में मुझे लगता है कि तुम क्या चाहते हो सकता है

parser.add_argument('-b', action='store_true', default=False) 
+0

यह सही है। धन्यवाद। – dublintech

+6

मुझे विश्वास नहीं है कि 'डिफ़ॉल्ट = गलत' आवश्यक है। –

+19

@PaulDraper: स्पष्ट अंतर्निहित से बेहतर है। – sberry

15
parser.add_argument('--foo', action='store_true') 
2
import distutils.util 
ARGP.add_argument('--on', '-o', type=distutils.util.strtobool, default='true') 

उदाहरण यह बुला है:

$ ./myscript    # argp.on = 1 
$ ./myscript --on=false  # argp.on = 0 
$ ./myscript --on=False  # argp.on = 0 
$ ./myscript --on=0   # argp.on = 0 
$ ./myscript --on=1   # argp.on = 1 
$ ./myscript -o0   # argp.on = 0 
$ ./myscript -o false  # argp.on == 0 

मैं उल्लेख करना चाहिए, यदि आप एक स्थानीय आवरण के लिए तर्क बाध्य कर सकते हैं यदि आप "हां" और "नहीं" जैसे मानों का समर्थन करना चाहते हैं तो कुछ अन्य सटीक स्ट्रिंग मिलान को संभालने के लिए भी कार्य करें। आप इनपुट को yaml के रूप में व्याख्या करने का भी प्रयास कर सकते हैं, जो हां/नहीं भी संभाल सकता है। मैं हालांकि एक समय में यह नहीं किया है, और मैं हाल ही में लगता है कि मैं, action='store_false' के साथ एक --no-option, और action='store_true'

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