2012-07-16 18 views
9

[+-]a,b,c,d जैसे झंडे को पार्स करने के लिए argparse में कोई तरीका है?पायथन Argparse टॉगल झंडे

foo.py +s -b 

b की dest में s और झूठी की dest में यह सच है संग्रहीत करना चाहिए, विंडोज या लिनक्स attribchmod द्वारा किया बहुत पसंद।

वर्तमान में, मैं 2 अलग तर्क +s और store_true और store_false क्रमश साथ -s उपयोग कर रहा हूँ। लेकिन यह दो बार प्रत्येक झंडा लिस्टिंग इसके साथ एक बदसूरत मदद (+ एक & -एक) बनाता है

एक और वैकल्पिक हल मैन्युअल (regex के साथ बढ़ाया आर्ग पार्स करने के लिए जो किसी भी तरह बहुत आसान लगता है और कस्टम वर्णन का उपयोग होगा, लेकिन कर रही है कि मैं सिर्फ चारों ओर देखने के अगर वहाँ का उपयोग कर जो मैं एक ही बात ही argparse का उपयोग कर प्रदर्शन कर सकता है कुछ भी चाहता था पहले।

उत्तर

5

आप दोनों -s और +s गुजर एक भी add_argument कॉल करने के लिए, और एक कस्टम क्रिया का उपयोग करके ऐसा कर सकते हैं :

class ToggleAction(argparse.Action): 
    def __call__(self, parser, ns, values, option): 
     setattr(ns, self.dest, bool("-+".index(option[0]))) 
ap = ArgumentParser(prefix_chars='-+') 
ap.add_argument('-s', '+s', action=ToggleAction, nargs=0) 

ap.parse_args(['+s']) 
Namespace(s=True) 

ap.parse_args(['-s']) 
Namespace(s=False) 
+0

ग्रेट, किसी भी तरह मैंने सोचा कि 'एक्शन' कुंजी होगी लेकिन एक्शन क्लास को परिभाषित करने से चूक गई है। – nbaztec

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