Я хочу предоставить команде 3 аргумента: <version>
, <input file>
и <output file>
при обычном использовании. За исключением того, что есть специфический c флаг --init
, который в основном будет запускать программу без каких-либо требований к входным и выходным файлам.
Поэтому в идеале у меня была бы команда, использование которой:
py program.py --init
ИЛИ
py program.py <version> <input file> <output file>
Однако, поскольку позиционные аргументы всегда требуются (поскольку все 3 требуются при любых других обстоятельствах, кроме --init
), существует похоже, нет никакого способа получить чистый синтаксис, и все, о чем я мог подумать, - это превратить 3 позиционных аргумента в необязательный флаг, вызвать исключение, если необязательный флаг отсутствует, когда --init
не вызывается. И все это кажется уродливым.
Мой код пока:
def get_args():
parser = argparse.ArgumentParser(description="Tool for FOO-ing a BAR.")
parser.add_argument(dest="version", help="The version.")
parser.add_argument(dest="input", help="The input file.")
parser.add_argument(dest="output", help="The output file.")
parser.add_argument("-i", "--init", dest="init", action="store_true", help="Foo Init.")
return parser.parse_args()
Чтобы уточнить:
Либо все 3 аргумента (<version> <input> <output>
) ДОЛЖНЫ быть указаны .
ИЛИ
Программа запускается только с флагом --init
и должны быть указаны 0 аргументов.
Программа НЕ должна принимать с указанными 0, 1 или 2 аргументами (без --init
флаг).