Я хотел бы иметь 3 необязательных позиционных аргумента (int
, int
, затем str
).
Что я хочу:
$ ./args.py 0 100 vid
start=0
end=100
video='vid'
$ ./args.py 0 100
start=0
end=100
video=None
$ ./args.py 0
start=0
end=None
video=None
$ ./args.py vid
start=None
end=None
video='vid'
$ ./args.py
start=None
end=None
video=None
Что я пробовал:
#!/usr/bin/python3
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('start', type=int, nargs='?')
parser.add_argument('end', type=int, nargs='?')
parser.add_argument('video', type=str, nargs='?')
print(parser.parse_args())
Проблема с этим кодом:
$ ./args.py vid
usage: args.py [-h] [start] [end] [video]
args.py: error: argument start: invalid int value: 'vid'
argparse знает, что значение 'vid' не является целым числом, поэтому я бы хотел«пропустить» два первых аргумента start
и end
, поскольку они не совпадают.
Когда я делаю аргумент video
обязательным, он работает немного лучше:
parser.add_argument('start', type=int, nargs='?')
parser.add_argument('end', type=int, nargs='?')
parser.add_argument('video', type=str)
Демо:
# Fine!
$ ./args.py 0 100 vid
start=0
end=100
video='vid'
# Fine!
$ ./args.py vid
start=None
end=None
video='vid'
# Not fine
./args.py
usage: args.py [-h] [start] [end] video
args.py: error: the following arguments are required: video