2012-11-09 23 views
6

Tôi muốn một kịch bản mà có (ví dụ) ba đối số:Làm cách nào để hạn chế tập lệnh python của tôi chỉ chấp nhận một đối số? (Argparse)

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument("--a",help="Argument a") 
parser.add_argument("--b",help="Argument b") 
parser.add_argument("--c",help="Argument c") 
args= parser.parse_args() 

Nhưng làm cho nó để nó chỉ có thể xác định chỉ một trong hai 'a', 'b', hoặc 'c 'tại bất kỳ thời gian cho ví dụ bạn có thể chỉ định 'a' nhưng không phải 'b' hoặc 'c' Điều này có khả thi không và tôi sẽ đạt được nó như thế nào?

Trả lời

10

argpase cho phép bạn chỉ định điều này bằng phương pháp add_mutually_exclusive_group().

import argparse 
parser = argparse.ArgumentParser() 
g = parser.add_mutually_exclusive_group() 
g.add_argument("--a",help="Argument a") 
g.add_argument("--b",help="Argument b") 
g.add_argument("--c",help="Argument c") 
args= parser.parse_args() 
+0

Cảm ơn bạn. Chỉ cần những gì tôi đang tìm kiếm. – Sheldon

+1

@Alfe - cảm ơn chỉnh sửa đó! – bgporter

1

Sử dụng add_mutually_exclusive_group() nêu trên để kiểm tra này vào mức độ argparse rồi.

Nếu bạn muốn có quyền kiểm soát nhiều hơn về thông báo lỗi và các loại tương tự, bạn có thể tất nhiên kiểm tra kết quả sau:

if len([x for x in args.a, args.b, args.c if x is not None]) > 1: 
    raise Exception("Not allowed!") 
Các vấn đề liên quan