अर्गपर्स का उपयोग करके या तो दो तर्कों की आवश्यकता होती है


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()

BTW, बस इसी तरह के मुद्दे का जिक्र करते हुए एक और सवाल मिला ।

उम्मीद है की यह मदद करेगा


1
मैंने कभी अनुमान नहीं लगाया होगा कि यह इतना आसान था! लव यू पायथन 3.6!
— bjd2385

कौन ईसाई है और उसका जवाब कहां है?
— जोजफ

3
अरे @ जिज़फ, यह जवाब अब तक पुराना है। मुझे यकीन नहीं है कि उत्तर क्या था। इसे शायद अब तक हटा दिया गया है। उसके लिए खेद है!
— jlengrand

1
@jlengrand आपके जवाब के बाद भी मेरे लिए काम किया जब मैंने महसूस किया कि यह वास्तव में प्रश्न में प्रस्तावित दोनों स्थितियों को हल करता है ( XORमूल रूप से)। मेरी शुरुआती चिंता यह थी कि आपकी केवल दो स्थितियों में से केवल एक को ही हल किया गया था।
— जोजफ

प्रतिक्रिया के लिए धन्यवाद। मुझे पता था कि यह सब कुछ वास्तव में हल कर रहा है, लेकिन यह निश्चित नहीं था: डी। मैं तदनुसार उत्तर संपादित करूँगा!
— jlengrand

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")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.