एक पानी का छींटा के साथ 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/issue15125argparseउपयोग 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.