পাইথন আরগপারস অচেনা যুক্তিগুলি উপেক্ষা করে


206

Optparse, পুরাতন সংস্করণটি সমস্ত অচেনা যুক্তি উপেক্ষা করে এবং বহন করে। বেশিরভাগ পরিস্থিতিতে, এটি আদর্শ নয় এবং এটি আরগপার্সে পরিবর্তিত হয়েছিল। তবে কয়েকটি পরিস্থিতি রয়েছে যেখানে আপনি কোনও অচেনা যুক্তি উপেক্ষা করতে এবং আপনার নির্দিষ্ট করাগুলির বিশ্লেষণ করতে চান।

উদাহরণ স্বরূপ:

parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest="foo")
parser.parse_args()

$python myscript.py --foo 1 --bar 2
error: unrecognized arguments: --bar

এটি ওভাররাইট করার জন্য কি এখনও আছে?


14
খুব সহজ যদি আপনি অন্য প্রোগ্রামে একটি মোড়ক লিখছেন, এবং আপনি কয়েকটি যুক্তি ক্যাপচার এবং সংশোধন করতে চান, তবে বাকীটি পাস করুন!
অ্যালান ডি স্মেট

2
ঠিক এখানে কেন আমি এখানে এসেছি @ অ্যালানডিমেট! খুশী আমি ক্রেজি কিছু করার চেষ্টা করছি না :)
বাইয়ান্ডারসন

উত্তর:


351

প্রতিস্থাপন করা

args = parser.parse_args()

সঙ্গে

args, unknown = parser.parse_known_args()

উদাহরণ স্বরূপ,

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
args, unknown = parser.parse_known_args(['--foo', 'BAR', 'spam'])
print(args)
# Namespace(foo='BAR')
print(unknown)
# ['spam']

21
+1 - জানত না যে এর মতো কিছু আছেparse_known_args
11

7
আমিও না! এমনকি ডকস.পাইথন.আর.গ্রাবারি /এও এটি মিস করেছি । ধন্যবাদ
joedborg

1
পার্সার্গের সাথে নাকেরেস্ট ব্যবহার করার চেষ্টা করার সময় এটি প্রকাশিত হয়েছিল (এটি নস্টেস্ট আরোগুলি ব্যবহার করার অনুমতি দিতে অস্বীকৃতি জানায়) কারণটি ছিল আমার পরীক্ষাগুলির parser.parse_args(None)চেয়ে বরং আমি parser.parse_args([])করছি।
অ্যান্ডি হেডেন

3
এফডাব্লুআইডাব্লু, এর parse_known_argsপরিবর্তে কোড parse_argsব্যবহারের ArgumentParserসুযোগটি if __name__ == 'main':( Trueআইপ্যাথন নোটবুকের সমস্ত কক্ষের জন্য একটি শর্ত) ... যা আমি বিকাশ এবং পরীক্ষার কোডটিকে প্রচুর পরিমাণে সহায়তা করি যা আমি অবশেষে অনুরোধ করা স্ক্রিপ্টে স্থানান্তর করতে চাই find থেকে একটি কমান্ড লাইন)
কাণ্ডজ্ঞান

1
এটি ""
চ্ছিক

21

আপনি যদি বাকী অংশগুলি parser.add_argument('args', nargs=argparse.REMAINDER)ব্যবহার করতে চান তবে এটির সাথে একটি নতুন যুক্তিতে রাখবেন।


1
এটি পাইথন ২. 2.- এ কাজ করে parse_args()এবং এর প্রয়োজন হয় না doesn't parse_known_args()
ওওজেমিস্টার

4
Argparse.REMAINDER ব্যবহার করা দীর্ঘস্থায়ী বাগ সহ ভরাট বলে মনে হচ্ছে। আমি অবশ্যই এটি কাজ করতে পারি না। parse_علوم_args () একটি ভাল বিকল্প।
ম্যাট

1
সবেমাত্র একটি দীর্ঘস্থায়ী রিমাইন্ডার বাগে ছুটে এসেছেন: বাগসপিটিথন.অর্গ
স্কট কার্পেন্টার

7

আসলে আরগপার্স এখনও "উপেক্ষা" করে না _unrecognized_args। যতক্ষণ না এই "অপরিজ্ঞাত" আর্গুমেন্টগুলি ডিফল্ট উপসর্গটি ব্যবহার করে না আপনি পার্সার থেকে কোনও অভিযোগ শুনতে পাবেন না।

@ Anutbu এর কনফিগারেশন ব্যবহার করে তবে মান সহ parse.parse_args(), যদি আমরা নিম্নলিখিত যুক্তি দিয়ে আমাদের প্রোগ্রামটি চালিত করি ute

$ program --foo BAR a b +cd e

আমাদের সাথে কাজ করার জন্য এই নেমস্পিড ডেটা সংগ্রহ করতে হবে।

Namespace(_unrecognized_args=['a', 'b', '+cd', 'e'], foo='BAR')

যদি আমরা ডিফল্ট উপসর্গটিকে -অগ্রাহ্য করতে চাইতাম তবে আমরা আরগমেন্ট পার্সার পরিবর্তন করতে পারি এবং সিদ্ধান্ত নিতে পারি যে এর +পরিবর্তে আমরা আমাদের "স্বীকৃত" যুক্তিগুলির জন্য একটি ব্যবহার করতে যাচ্ছি ।

parser = argparse.ArgumentParser(prefix_chars='+')
parser.add_argument('+cd')

একই কমান্ড উত্পাদন করবে

Namespace(_unrecognized_args=['--foo', 'BAR', 'a', 'b'], cd='e')

এটি আপনার পাইপে রাখুন এবং এটি ধূমপান করুন =)

nJoy!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.