2016-10-14 6 views
1

Используя argparse, я создал небольшой скрипт, содержащий синтаксический анализатор командной строки для моей программы анализа, которая является частью собственного пакета python. Он отлично работает, но мне не очень нравится, как его контролировать.Nicer командной строки parse 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 

Иногда мне нужны некоторые варианты. Для этого он может выглядеть loke

py_analysis --data path_to_data_file --option_1 True --option_2 True 

По моему личному вкусу это отвратительно. Я бы предпочёл что-то вроде

py_analysis path_to_data_file --option_1 --option_2 

Я вполне уверен, что это возможно. Я просто не знаю, как

+2

Взгляните на документ: https://docs.python.org/3/ библиотека/argparse.html. Вы хотите 'action = 'store_true''. –

ответ

5

Использование store_true действие

parser.add_argument('-e', '--option_1', help='', default=False, action ='store_true') 

Затем просто добавив в командную строку --option_1 установит его значение в Истинного.

1

Чтобы иметь позиционное аргумент вместо опции, замените:

parser.add_argument('-d', '--data',help='') 

по:

parser.add_argument('data_file', help='') 
+1

Добавление _type = argparse.FileType () _ будет непосредственно создавать файл-объект - вместо строки с именем файла, – volcano

+0

Жаль, я не могу принять два ответа: ваш и один из @volcano в совокупности - это именно то, что я хотел – Glostas

+0

@Glostas нет проблем;) –