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


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/issue15125argparseব্যবহার করে 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.