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


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.