2012-10-11 13 views
70

के साथ argparse में विकल्प होने के बाद मैं --pm-export जैसे argparse मॉड्यूल में कुछ विकल्प रखना चाहता हूं, हालांकि जब मैं इसे args.pm-export जैसे उपयोग करने का प्रयास करता हूं तो मुझे त्रुटि मिलती है कि pm विशेषता नहीं है। मैं इस मुद्दे के आसपास कैसे हो सकता हूं? क्या कमांड लाइन विकल्पों में - होना संभव है?डैश

उत्तर

90

indicated in the argparse docs के रूप में:

वैकल्पिक तर्क कार्यों के लिए, गंतव्य का मूल्य सामान्य रूप से विकल्प तार से अनुमान लगाया गया है। ArgumentParser पहली लंबी विकल्प स्ट्रिंग और प्रारंभिक -- स्ट्रिंग को अलग करने से dest के मूल्य उत्पन्न करता है। किसी भी आंतरिक - पात्रों यकीन है कि स्ट्रिंग मान्य विशेषता नाम

तो तुम args.pm_export का उपयोग करना चाहिए है बनाने के लिए _ पात्रों में परिवर्तित हो जाएगा।

13

डैश अंडरस्कोर में बदल रही हैं:

import argparse 
pa = argparse.ArgumentParser() 
pa.add_argument('--foo-bar') 
args = pa.parse_args(['--foo-bar', '24']) 
print args # Namespace(foo_bar='24') 
+2

केवल वैकल्पिक तर्कों के लिए। आवश्यक लोगों को उनके हाइफ़न रखने के लिए, इसलिए उन्हें सुलभ बनाने के लिए अंडरस्कोर की आवश्यकता होती है। – n00dle

54

दुर्भाग्य से, डैश-टू-अंडरस्कोर प्रतिस्थापन

parser = argparse.ArgumentParser(description='Process some integers.') 
parser.add_argument('logs-dir', 
        help='Directory with .log and .log.gz files') 
parser.add_argument('results-csv', type=argparse.FileType('w'), 
        default=sys.stdout, 
        help='Output .csv filename') 
args = parser.parse_args() 
print args 

# gives 
# Namespace(logs-dir='./', results-csv=<open file 'lool.csv', mode 'w' at 0x9020650>) 

तो जैसे positionalarguments (-- लगाया जाता है नहीं) के लिए काम नहीं करता है, तो आप विशेषता नाम और metavar kwarg के रूप में add_argument() को 1'st तर्क का उपयोग करना चाहिए सेट में इसे कैसे देखना चाहिए:

parser = argparse.ArgumentParser(description='Process some integers.') 
parser.add_argument('logs_dir', metavar='logs-dir', 
        nargs=1, 
        help='Directory with .log and .log.gz files') 
parser.add_argument('results_csv', metavar='results-csv', 
        nargs=1, 
        type=argparse.FileType('w'), 
        default=sys.stdout, 
        help='Output .csv filename') 
args = parser.parse_args() 
print args 

# gives 
# Namespace(logs_dir=['./'], results_csv=[<open file 'lool.csv', mode 'w' at 0xb71385f8>]) 
+4

प्रासंगिक पायथन बग रिपोर्ट: http://bugs.python.org/issue15125। 'argparse'' setattr' और 'getattr' का उपयोग करता है, इसलिए 'dest' नामों को वैध' dot' विशेषता नाम नहीं होना चाहिए। उपयोगकर्ता 'getattr' का भी उपयोग कर सकते हैं। – hpaulj

+3

मैं बस 'positional_arg = getattr (पार्सर,' पोजिशनल-एर्ग ') ' –

+0

बिल्कुल वही करता हूं जो मुझे चाहिए - मैंने इसे' मेटावर 'के साथ पीछे किया और यह पता नहीं लगा कि यह क्यों काम नहीं कर रहा था। धन्यवाद! – dwanderson

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