Моя программа должна включать следующие параметры, правильно разобранные argparse:
- чисто необязательный:
[-h, --help]
и[-v, --version]
- взаимоисключающий:
[-f FILE, --file FILE]
и[-u URL, --url URL]
- необязательно, если выбрано
--url
:[-V, --verbose]
- требуется, если выбрано либо
--file
, либо--url
:[-F, --format FORMAT]
Желаемый шаблон использования:
prog.py [-h] [-v] [-f FILE (-F FORMAT) | -u URL [-V] (-F FORMAT) ]
с требованием -F
, применяемым к обоим членам взаимоисключающей группы.
Не уверен, что это скорее positional.
Так что должно быть возможно запустить:
prog.py -u "http://foo.bar" -V -F csv
и крик синтаксического анализа в случае, если я забыл -F
(как он и предполагал).
Что я сделал до сих пор:
parser = ArgumentParser(decription='foo')
group = parser.add_mutually_exclusive_group()
group.add_argument('-f','--file', nargs=1, type=str, help='')
group.add_argument('-u','--url', nargs=1, type=str, help='')
parser.add_argument('-V','--verbose', action='store_true', default=False, help='')
parser.add_argument('-F','--format', nargs=1, type=str, help='')
Поскольку он имеет "ванильный режим" для запуска без аргументов командной строки, все аргументы должны быть необязательными.
Как я могу реализовать точки 3. и 4. в свой код?
EDIT:
Я пробовал -F
и -u
как подпарамеры, как описано здесь, но подкоманды, похоже, рассматриваются как позиционные, и синтаксический анализатор дает мне error: too few arguments
, если я запускаю это без аргументов.