#python #argparse
#питон #argparse аргпарс
Вопрос:
Используя argparse, я создал небольшой скрипт, содержащий анализатор командной строки для моей аналитической программы, которая является частью самодельного пакета python. Это работает отлично, но мне не очень нравится, как это контролировать.
Вот как выглядит код в самом скрипте
def myAnalysis():
parser = argparse.ArgumentParser(description='''
lala''')
parser.add_argument('-d', '--data',help='')
parser.add_argument('-e', '--option_1', help='', default=False, required=False)
parser.add_argument('-f', '--option_2', help='', default=False, required=False)
# combine parsed arguments
args = parser.parse_args()code here
В дополнение к этому в установочном файле пакета анализа есть еще кое-что
entry_points={
'console_scripts': [
'py_analysis = edit.__main__:myAnalysis'
]
Как я уже сказал, это работает без каких-либо проблем. Для анализа некоторых данных я должен использовать
py_analysis --data path_to_data_file
Иногда мне нужны некоторые варианты. Для этого он может выглядеть локе
py_analysis --data path_to_data_file --option_1 True --option_2 True
На мой личный вкус, это довольно некрасиво. Я бы предпочел что-то вроде
py_analysis path_to_data_file --option_1 --option_2
Я почти уверен, что это возможно. Я просто не знаю, как это сделать
Комментарии:
1. Взгляните на документ: docs.python.org/3/library/argparse.html . Ты хочешь
action='store_true'
.
Ответ №1:
Используйте действие store_true
parser.add_argument('-e', '--option_1', help='', default=False, action ='store_true')
Затем, просто добавив в командную строку —option_1, его значение будет равно True.
Ответ №2:
Чтобы иметь позиционный аргумент вместо параметра, замените:
parser.add_argument('-d', '--data',help='')
Автор::
parser.add_argument('data_file', help='')
Комментарии:
1. Добавление типа =argparse. FileType(<режим доступа>) будет напрямую создавать объект file — вместо строки с именем файла,
2. Жаль, я не могу принять два ответа, ваш и один из @volcano в сочетании — это именно то, что я хотел
3. @Glostas нет проблем 😉