Я предполагаю, что мое приложение будет иметь два основных режима работы:
- Считывать значения из файла и работать с ними
- Генерировать значения из диапазона и работать с ними .
Мое приложение будет вызываться как:
myApp.py --type range 1000 2000
или
myApp.py --type from-file /tmp/myfile.csv
И есть несколько дополнительных опций, которые я опускаю для краткости, но они делают актуальным наличие полного процессора аргументов.
Если я выбираю диапазон, мне нужны 2 позиционных параметра, но если я выбираю из файла, мне нужен только один. Можно ли использовать argparse для обеспечения правильного количества позиционных параметров на основе параметра типа? Может быть, "choices" не лучший тип argparse для использования, есть ли лучший способ?
import argparse
parser = argparse.ArgumentParser(description='myApp')
parser.add_argument('--type', '-t', choices=['range', 'from-file'], required=True,
help='Generate values from a range or load from a file.')
# Stuff here for argparse to enforce the correct number of positional parameters.
args = parser.parse_args()
Кроме того, есть ли хороший способ (например, встроенный в argparse) сделать так, чтобы " --type "не требуется, но я мог бы запустить свое приложение как:
myApp.py range 1000 2000
или
myApp.py from-file /tmp/myfile.csv
Я бы хотел, чтобы argparse по-прежнему принудительно применял этот 'диапазон' и 'из -file '- единственные допустимые параметры, и эти 2 параметра должны следовать за' диапазоном 'или 1 параметр должен следовать за' from-file '.
EDIT:
I Меня также устраивают следующие вызовы:
myApp.py --range 1000 2000
или
myApp.py --from-file /tmp/myfile.csv
Это может упростить процесс требования 2 vs 1 позиционных параметров. Но тогда я бы хотел, чтобы argparse принудительно указывал, что один из двух параметров был указан, а не оба вместе. Может ли argparse это сделать?
Спасибо