Это может быть легко заархивировано с помощью docopt.
Синтаксис: Usage: ./foo [--path <src> <dst>]...
Ввод: ./foo --path src1 dst1 --path src2 dst2
Код:
>>> from docopt import docopt
>>> doc = "Usage: ./foo [--path <src> <dst>]..."
>>> argv = "--path old1 new1 --path old2 new2".split()
>>> args = docopt(doc, argv)
Результат:
{
"--path": 2,
"<dst>": [
"dst1",
"dst2"
],
"<src>": [
"src1",
"src2"
]
}
А теперь сделайте что-нибудь с этим:
>>> if bool(args["--path"]):
>>> n = 1 if args["--path"] is True else if args["--path"]
>>> for i in range(0, n)]:
>>> print("{}, {}".format(args["<old>"][i], args["<new>"][i]))
src1, dst1
src2, dst2
Чтобы добавить несколько позиционных аргументов, необходимо, чтобы параметр пути и аргументы были в правильном порядке с паренами " () ".
Usage: ./foo [(--path <src> <dst>)]... <arg>...
Внимание: docopt не вызывает SystemExit
в случае, если пользователь смешивает синтаксис и вводит ./foo arg --path src dst
, если вы используете опции с несколькими аргументами, подобными этому. Вам придется обработать его самостоятельно или добавить еще одну (под) команду перед ним.
Usage: ./foo [(--path <src> <dst>)]... bar <arg>...