Tôi đang cố gắng để có một nhóm loại trừ lẫn nhau giữa các nhóm khác nhau: Tôi có đối số -a, -b, -c và tôi muốn có xung đột với -a và -b cùng nhau , hoặc -a và -c cùng nhau. Sự giúp đỡ sẽ hiển thị một cái gì đó như [-a | ([-b] [-c])].Sử dụng loại trừ lẫn nhau giữa các nhóm
Các mã sau đây dường như không có các tùy chọn loại trừ lẫn nhau:
import argparse
parser = argparse.ArgumentParser(description='My desc')
main_group = parser.add_mutually_exclusive_group()
mysub_group = main_group.add_argument_group()
main_group.add_argument("-a", dest='a', action='store_true', default=False, help='a help')
mysub_group.add_argument("-b", dest='b', action='store_true',default=False,help='b help')
mysub_group.add_argument("-c", dest='c', action='store_true',default=False,help='c help')
parser.parse_args()
Phân tích kết hợp khác nhau - tất cả các pass:
> python myscript.py -h
usage: myscript.py [-h] [-a] [-b] [-c]
My desc
optional arguments:
-h, --help show this help message and exit
-a a help
> python myscript.py -a -c
> python myscript.py -a -b
> python myscript.py -b -c
tôi đã cố gắng thay đổi mysub_group
là add_mutually_exclusive_group
biến tất cả mọi thứ vào nhau độc quyền:
> python myscript.py -h
usage: myscript.py [-h] [-a | -b | -c]
My desc
optional arguments:
-h, --help show this help message and exit
-a a help
-b b help
-c c help
Làm cách nào để thêm đối số cho [-a | ([-b] [-c])]?
Không hoàn toàn những gì tôi muốn, vì nó không mang lại cho tôi tùy chọn chỉ có -c (không có b). – itzhaki
Đó là sự thật, lời xin lỗi của tôi. Tôi không nghĩ rằng bạn có thể có được chính xác những gì bạn muốn với argparse, nhưng tôi vẫn nghĩ docopt là một lựa chọn tốt, bạn chỉ cần thêm cách sử dụng: myscript.py [-h | -a | [-b -c]] vào chuỗi tài liệu của bạn và nó sẽ hoạt động mọi thứ cho bạn –