#python #argparse
#python #argparse
Вопрос:
Если я передаю логическую опцию своему скрипту, которая в основном является true, если опция указана, и false, если нет, как мне обработать ее иначе с argparse
, чем параметр, который содержит значение.
Например, мой скрипт принимает propFile параметра, который содержит значение и параметр clean, который является просто флагом true / false. Использование является
myScript.py —propFile=путь/к/my/prop.файл -очистить
Обратите внимание, что я пытаюсь различать параметры и опции на уровне пользователя, присваивая два тире первому и одно тире второму, что не должно иметь значения для интерпретатора.
Я хочу назначить, scrptVarClean=True
если -clean
предусмотрено, а False
если нет.
То, что я пробовал, это:
argparser = argparse.ArgumentParser()
argparser.add_argument('--propFile', help='Properties file path')
argparser.add_argument('-clean', help='Clean?')
args = argparser.parse_args();
propFile = args.props
clean = args.clean
но я получил
pgCloner.py : ошибка: аргумент -чистый: ожидался один аргумент
Как я могу использовать необязательный логический аргумент с argparse?
Комментарии:
1. Обратите внимание, что обычно для коротких версий флагов используются одиночные тире (например,
-c
для--clean
); хотя для интерпретатора это не имеет значения, это может быть не то, чего ожидают потребители вашего CLI.2. Я знаю, но для параметра arg я просто избегаю предоставлять более короткую версию, чтобы различать
3. Это то, что я прочитал в «Я пытаюсь различать параметры и опции на уровне пользователя, присваивая два тире первому и одно тире второму» , я просто говорю: не надо.
4. такого рода обсуждение семантики довольно бессмысленно. у вас никогда не будет единого соглашения, точно так же, как мир никогда не будет говорить только на одном языке
5. Этого, конечно, не будет, если люди откажутся использовать те, которые уже существуют, и будут настаивать на создании своих собственных, но вы делаете это сами.
Ответ №1:
Значение clean
будет True
, если указано «—clean» или «-c», иначе False
parser.add_argument('-c', '--clean', action="store_true")
Комментарии:
1. Опереди меня в этом. Очень приятно.
2. Иначе известный как «прочитайте документы argparse «.
3. @MadPhysicist да, я заметил, но это не показалось хорошим. Давайте предоставим лучший вариант…
4. @jatinderjit. Это чисто дело вкуса, и рассуждения OP были разумными.
5. это вопрос личных предпочтений, различия между которыми разумны, как отметил @MadPhysicist. попытка применить глобальный стандарт к таким тривиальным соглашениям, как это, была бы, по меньшей мере, педантичной.