एक पानी का छींटा के साथ argparse में विकल्प होने


154

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

जवाबों:


226

के रूप में में संकेत argparseडॉक्स :

वैकल्पिक तर्क क्रियाओं के लिए, विकल्प के तार से आमतौर पर भाग्य का मान निकाला जाता है। ArgumentParser पहले लंबे विकल्प स्ट्रिंग और प्रारंभिक --स्ट्रिंग को दूर करके भाग्य का मूल्य उत्पन्न करता है । यह सुनिश्चित करने के लिए कि स्ट्रिंग एक मान्य विशेषता नाम है, किसी भी आंतरिक -वर्ण को _वर्णों में परिवर्तित किया जाएगा

इसलिए आपको उपयोग करना चाहिए args.pm_export।


108

दुर्भाग्य से, डैश-टू-अंडरस्कोर रिप्लेसमेंट पोजिशनलर्गमेंट्स ( --जैसे उपसर्ग नहीं ) के लिए काम नहीं करता है

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>)

तो, आपको 1'st तर्क का उपयोग add_argument()विशेषता नाम और metavarkwarg के रूप में करना चाहिए कि यह मदद में कैसे दिखना चाहिए:

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>])

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

5
मैं अभी positional_arg = getattr( parser, 'positional-arg' )
— करूंगा

1
वास्तव में मुझे क्या चाहिए - मैंने इसके साथ पीछे किया metavarऔर यह पता नहीं लगा सका कि यह काम क्यों नहीं कर रहा है। धन्यवाद!
— dwanderson 21

17

डैश अंडरस्कोर में कनवर्ट किए जाते हैं:

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

4
केवल वैकल्पिक तर्कों के लिए। अपने हाइफ़न को रखने के लिए आवश्यक है, इसलिए उन्हें सुलभ बनाने के लिए एक अंडरस्कोर की आवश्यकता होती है।
— n00dle
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.