1) Вы не можете передать любое из -foo, -baz, -bar
в качестве значений.Дефис заставит ArgParse интерпретировать его как флажок опции и выдаст ошибку.
2)
Какой самый элегантный способ сортировки аргументов?
Вы можете иметь
ch_list = ['foo', 'bar', 'baz', '+foo', '+bar', '+baz']
, которыйбудет гарантировать, что ничего за пределами этого списка не разрешено, но это не помешает пользователю ввести микс и совпадение различных форматов, скажем ./program --arch foo +baz +bar
.
Чтобы предотвратить это, вам нужно будет самостоятельно проверить аргументы после parse_args()
.
args = parser.parse_args()
l = args.arch if args.arch is not None else []
if len(l):
has_plus = lambda x : x[0] == '+'
first_has_plus = has_plus(l[0])
for x in l:
if first_has_plus ^ has_plus(x):
print("INVALID")
return
print("PASSED")