Я сталкиваюсь с проблемой в argparse
, когда я смешиваю позиционные аргументы, необязательные аргументы и argparse.REMAINDER
parser = argparse.ArgumentParser()
parser.add_argument('verbose', action="store")
parser.add_argument('--config', '-c', nargs="?", dest="config_file")
parser.add_argument('--dry-run', action="store_true", dest="dryrun")
parser.add_argument('args', nargs=argparse.REMAINDER, action="store")
Пробный запуск:
python test.py verose="5" --config config.xml graph --dry-run
Ожидаемый результат:
verbose = "5"
config_file = config.xml
dryrun = True
args = ['graph']
Фактический выход:
verbose = "5"
config_file = config.xml
dryrun = False
args = ['graph', '--dry-run']
Мое требование: у меня есть verbose
, -c
, --config
и --dry-run
в качестве параметров командной строки, а любые другие параметры, представленные в командной строке, должны быть сохранены в списке args
независимо от порядка появления аргументов в командной строке. Помогите, пожалуйста, где я делаю не так. Также есть ли другой лучший парсер командной строки для Python?
1 ответ
Я бы сказал, что вам нужна следующая конфигурация:
parser.add_argument('--verbose', action="store")
parser.add_argument('-c', '--config', nargs="?", dest="config_file")
parser.add_argument('--dry-run', action="store_true", dest="dryrun")
parser.add_argument('args', nargs='*')
Я думаю, что аргумент «REMAINDER», который вы указали, конкретно указывает модулю argparse принимать остальные аргументы в args, когда он находит первый аргумент, он не может соответствовать остальным.
Если вам нужно 0 или более аргументов для args
, используйте '*', если вы хотите хотя бы 1 аргумент, используйте '+' в качестве аргумента nargs
.
Помимо этого, я бы порекомендовал документацию argparse, поскольку есть много возможностей для уже разобраны с нужным типом (например, int или аргументы файла). Также создание модуля CLI-argparse
в бесплатной Aptana Studio обеспечивает хорошую оболочку для argparse с уже установленными некоторыми стандартными аргументами (например, подробный). Verbose в этом случае будет целым числом.
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.