Пример python argparse?

Я пытаюсь изучить argparse, чтобы использовать его в своей программе, синтаксис должен выглядеть следующим образом:

-a --aLong <String> <String>
-b --bLong <String> <String> <Integer>
-c --cLong <String>
-h --help

У меня есть этот код:

#!/usr/bin/env python
#coding: utf-8

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Lorem Ipsum')
    parser.add_argument('-a','--aLong', help='Lorem Ipsum', required=False)
    parser.add_argument('-b','--bLong', help='Lorem Ipsum', required=False)
    parser.add_argument('-c','--cLong', help='Lorem Ipsum', required=False)
    parser.add_argument('-h','--help', help='Lorem Ipsum', required=False)
    parser.parse_args()

Вопрос в том, что я читал в официальном документе, видел видео на YouTube и т.д., но я не мог понять, как определить количество "под-аргументов" в "главном аргументе"?

Пример: myApp.py -b Foobar 9000, как я могу установить, что -b должен иметь два "под-аргумента", и как я могу получить значения, Foobar и 9000?

И еще одно сомнение, я знаю, что могу установить аргумент required или нет, но я хотел, чтобы моя программа выполнялась только при передаче хотя бы одного аргумента, любой из четырех упоминается.

Возможно, это глупый вопрос, но, к сожалению, я не могу этого понять, и, надеюсь, здесь есть кто-то с "способностями учителя", чтобы объяснить это.

Ответ 1

import argparse

# Use nargs to specify how many arguments an option should take.
ap = argparse.ArgumentParser()
ap.add_argument('-a', nargs=2)
ap.add_argument('-b', nargs=3)
ap.add_argument('-c', nargs=1)

# An illustration of how access the arguments.
opts = ap.parse_args('-a A1 A2 -b B1 B2 B3 -c C1'.split())

print(opts)
print(opts.a)
print(opts.b)
print(opts.c)

# To require that at least one option be supplied (-a, -b, or -c)
# you have to write your own logic. For example:
opts = ap.parse_args([])
if not any([opts.a, opts.b, opts.c]):
    ap.print_usage()
    quit()

print("This won't run.")

Ответ 2

Ключом к этому является определение требуемой взаимоисключающей группы.

import argparse

# Use nargs to specify how many arguments an option should take.
ap = argparse.ArgumentParser()
group = ap.add_mutually_exclusive_group(required=True)
group.add_argument('-a', nargs=2)
group.add_argument('-b', nargs=3)
group.add_argument('-c', nargs=1)


# Grab the opts from argv
opts = ap.parse_args()

# This line will not be reached if none of a/b/c are specified.
# Usage/help will be printed instead.

print(opts)
print(opts.a)
print(opts.b)
print(opts.c)