আরগপার্স ব্যবহার করে দুটি যুক্তির প্রয়োজন


182

প্রদত্ত:

import argparse

pa = argparse.ArgumentParser()
pa.add_argument('--foo')
pa.add_argument('--bar')

print pa.parse_args('--foo 1'.split())

আমি কিভাবে করবো

  • অন্তত এক করা "foo বিন্যাস, বার" এই বাধ্যতামূলক: --foo x, --bar yএবং --foo x --bar yজরিমানা
  • সর্বাধিক একটি "ফু, বার" বাধ্যতামূলক করুন: --foo xবা --bar yভাল, --foo x --bar yতা নয়

উত্তর:


296

আমি মনে করি আপনি পারস্পরিক বর্জনের মতো কিছু খুঁজছেন (কমপক্ষে আপনার প্রশ্নের দ্বিতীয় অংশের জন্য)।

এইভাবে, কেবল ফু বা বার গ্রহণ করা হবে, উভয়ই নয়।

    import argparse

    parser = argparse.ArgumentParser()
    group = parser.add_mutually_exclusive_group(required=True)
    group.add_argument('--foo',action=.....)
    group.add_argument('--bar',action=.....)
    args = parser.parse_args()

বিটিডাব্লু, একই ধরণের ইস্যু উল্লেখ করে আর একটি প্রশ্ন খুঁজে পেয়েছে ।

আশাকরি এটা সাহায্য করবে


1
আমি কখনই অনুমান করতে পারিনি এটি এত সহজ! পাইথন আপনাকে ভালোবাসি ৩.6!
— bjd2385

কে খ্রিস্টান উইটস এবং তার উত্তর কোথায়?
— আইজোসেফ

3
ওহে @ আইজোসেফ, এই উত্তরটি এখনই প্রেটে পুরানো। আমি নিশ্চিত না যে উত্তর আর কী ছিল। সম্ভবত এটি এখনই মুছে ফেলা হয়েছে। তার জন্য দুঃখিত!
— জ্লেংগ্র্যান্ড

1
@ জ্লেঞ্জ্রেন্ড আপনার উত্তরটি এখনও আমার পক্ষে কাজ করেছে যখন আমি বুঝতে পারলাম যে এটি আসলে প্রশ্নে প্রস্তাবিত দুটি শর্ত ( XORমূলত) সমাধান করে। আমার প্রাথমিক উদ্বেগটি হ'ল আপনার কেবলমাত্র দুটি শর্তের মধ্যে একটির সমাধান করেছেন।
— আইজোসেফ

সাহায্য করার জন্য ধন্যবাদ. আমার ধারণা ছিল এটি প্রকৃতপক্ষে সবকিছু সমাধান করছে, তবে আর নিশ্চিত ছিল না: ডি। আমি সেই অনুযায়ী উত্তর সম্পাদনা করব!
— জ্লেংগ্র্যান্ড

39

আপনার যদি এমন কিছু চেকের প্রয়োজন হয় যা মডিউলটি সরবরাহ করে না তবে আপনি সর্বদা এটি নিজেই করতে পারেন:

pa = argparse.ArgumentParser()
...
args = pa.parse_args()

if args.foo is None and args.bar is None:
   pa.error("at least one of --foo and --bar required")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.