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


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.