2012-06-22 34 views
98

Given:Yêu cầu một trong hai đối số sử dụng argparse

import argparse 

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

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

làm cách nào để

  • làm ít nhất một trong những "foo, bar" bắt buộc: --foo x, --bar y--foo x --bar y cũng tốt
  • khai thác tối đa một trong các yêu cầu "foo, bar": --foo x hoặc --bar y là tốt, --foo x --bar y không phải là
+0

thể trùng lặp của [Làm thế nào để viết mã tùy chọn tổ hợp argparse trong python] (http://stackoverflow.com/questions/5603364/how-to-code-argparse-combinational-options-in-python) – robert

Trả lời

152

Tôi nghĩ rằng bạn đang tìm kiếm một cái gì đó như mutual exclusion (ít nhất là cho phần thứ hai của câu hỏi của bạn). Bằng cách này, chỉ foo hoặc bar sẽ được chấp nhận, không phải cả hai.

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

Và bạn thực sự có thể giải quyết phần đầu tiên của câu hỏi với câu trả lời của Christian Witts. Bằng cách kết hợp cả hai, bạn sẽ có thể đạt được những gì bạn muốn.

BTW, chỉ tìm thấy another question đề cập đến cùng một loại vấn đề.

Hope this helps

+0

Tôi không bao giờ có thể đoán nó thật dễ dàng! Yêu bạn Python 3.6! – bjd2385

20

Nếu bạn cần một số phiếu, không được cung cấp bởi module bạn luôn có thể làm điều đó bằng tay:

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") 
Các vấn đề liên quan