Bạn có thể không thực sự làm điều đó với argparse
, tuy nhiên bạn có thể làm điều đó sau khi argparse
đã chạy.
Dưới đây là một ví dụ:
parser = argparse.ArgumentParser()
# group 1
parser.add_argument("-q", "--query", help="query", required=False)
parser.add_argument("-f", "--fields", help="field names", required=False)
# group 2
parser.add_argument("-a", "--aggregation", help="aggregation",
required=False)
Tôi đang sử dụng ở đây tùy chọn cho một dòng wrapper lệnh cho các truy vấn một MongoDB. Ví dụ collection
có thể gọi phương thức aggregate
hoặc phương pháp find
với đối số tùy chọn query
và fields
, do đó bạn thấy lý do hai đối số đầu tiên tương thích và đối số cuối cùng không phải là.
Vì vậy, bây giờ tôi chạy parser.parse_args()
và kiểm tra nội dung của nó:
args = parser().parse_args()
print args.aggregation
if args.aggregation and (args.query or args.fields):
print "-a and -q|-f are mutually exclusive ..."
sys.exit(2)
Tất nhiên, ít hack này chỉ làm việc đối với trường hợp đơn giản và nó sẽ trở thành một cơn ác mộng để rà soát tất cả các tùy chọn có thể nếu bạn có nhiều lẫn nhau các tùy chọn và nhóm độc quyền. Trong trường hợp đó, bạn nên chia các tùy chọn của mình thành nhóm lệnh. Để làm được điều đó, bạn nên làm theo gợi ý ở đây Python argparse mutual exclusive group.
Bạn có xem xét đơn giản là kiểm tra sau khi argparse nếu có? – erikbwork
Tôi có thể, điều tốt đẹp về argparse là nó xử lý thông báo lỗi cho bạn. –
Mặc dù bạn có thể thêm một nhóm các tùy chọn thông thường bằng cách sử dụng 'add_argument_group' vào nhóm loại trừ lẫn nhau, nhưng điều này không có tác dụng gì cả (giống như không có một nhóm độc quyền lẫn nhau). Có lẽ lựa chọn tốt hơn bạn có là viết một hành động tùy chỉnh thực hiện loại logic này. Nó sẽ là quá khó để làm. – Bakuriu