একটি ড্যাশ সহ আরগপার্সে বিকল্প থাকা


154

আমি আরগপার্সে মডিউলটিতে কিছু বিকল্প থাকতে চাই যেমন --pm-exportআমি যখন এটি ব্যবহার করার চেষ্টা করি তখন আমি args.pm-exportত্রুটি পাই যে কোনও বৈশিষ্ট্য নেই pm। আমি কীভাবে এই সমস্যাটি পেতে পারি? -কমান্ড লাইন বিকল্প থাকা সম্ভব ?

উত্তর:


226

হিসাবে নির্দেশিত argparseডক্স :

Argumentচ্ছিক যুক্তিযুক্ত ক্রিয়াগুলির জন্য, নিয়মের মানটি সাধারণত বিকল্পের স্ট্রিং থেকে অনুমিত হয় er আরগমেন্ট পার্সার প্রথম দীর্ঘ বিকল্প স্ট্রিং গ্রহণ করে এবং প্রাথমিক --স্ট্রিংটি সরিয়ে দিয়ে গন্তব্যের মান উত্পন্ন করে । কোনো অভ্যন্তরীণ -অক্ষর রূপান্তর করা হবে _অক্ষর নিশ্চিত স্ট্রিং করতে একটি কার্যকর গুণের নাম

সুতরাং আপনি ব্যবহার করা উচিত 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 add_argument()গুণ যুক্তিটি বৈশিষ্ট্যের নাম এবং metavarকোয়ার্গ হিসাবে ব্যবহার করা উচিত:

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এবং কেন এটি কাজ করছে না তা বুঝতে পারি না। ধন্যবাদ!
— ডোয়ান্ডারসন 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
শুধুমাত্র alচ্ছিক যুক্তিগুলির জন্য। তাদের হাইফেনগুলি রাখার জন্য প্রয়োজনীয়গুলি রয়েছে, সুতরাং এগুলি অ্যাক্সেসযোগ্য করার জন্য একটি আন্ডারস্কোর প্রয়োজন।
— n00dle
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.