Python argparse - необязательный аргумент, чтобы быть ни один или больше - PullRequest
0 голосов
/ 02 мая 2018

У меня есть необязательный аргумент -s для настройки инструмента. Я надеюсь, что пользователь мог бы ввести или использовать значение по умолчанию. Если он решит использовать значение по умолчанию, он сможет пропустить дополнительный ввод.

например, myScript -s и myScript -s "Hello" должны оба работать

Кажется, action = store_true плохо работает с nargs = '*'

1 Ответ

0 голосов
/ 02 мая 2018

argparse Действие магазина позволяет программисту различать 3 варианта использования:

  • опция отсутствует (использует default)
  • присутствует и не имеет дополнительного значения (использует const)
  • опция присутствует и имеет значение (использует переданное значение)

Предполагая, что вы хотите, чтобы -s и -s Hello выполняли то же самое, вы можете использовать

parser = argparse.ArgumentParser(description = "Some desc.")
parser.add_argument("-s", nargs='?', const='Hello', default = None)

тогда вы можете проверить это:

>>> parser.parse_args([])
Namespace(s=None)
>>> parser.parse_args(["-s"])
Namespace(s='Hello')
>>> parser.parse_args(["-s", 'Hello'])
Namespace(s='Hello')
>>> parser.parse_args(["-s", 'foo'])
Namespace(s='foo')
...