Подтвердить что ты не робот

Пользовательская функция "использования" в argparse?

Можно ли добавить пользовательскую функцию 'usage' вместо сообщения об использовании по умолчанию, предоставляемого python argparse.

Пример кода:

parser = argparse.ArgumentParser(description='Sample argparse py')
parser.add_argument('-arg_1',type=int, custom_usage_funct('with_some_message'))
output = parser.parse_args()

def custom_usage_funct(str):
    print str
    print '''
       Usage: program.py
         [-a, Pass argument a]
         [-b, Pass argument b]
         [-c, Pass argument c]
         [-d, Pass argument d]
         comment
         more comment
        '''

Если аргумент передан как строковое значение, а не целое, тогда программа должна вызвать пользовательскую функцию использования с сообщением об ошибке "Пожалуйста, укажите целочисленное значение"

Допустимый аргумент

program.py -arg_1 123

Недопустимый аргумент

program.py -arg_1 abc

       Please provide an integer value
       Usage: program.py
         [-a, Pass argument a]
         [-b, Pass argument b]
         [-c, Pass argument c]
         [-d, Pass argument d]
         comment
         more comment
4b9b3361

Ответ 1

Да, сообщение по умолчанию может быть переопределено аргументом use = keyword следующим образом:

def msg(name=None):                                                            
    return '''program.py
         [-a, Pass argument a]
         [-b, Pass argument b]
         [-c, Pass argument c]
         [-d, Pass argument d]
         comment
         more comment
        '''

и используя

import argparse
parser = argparse.ArgumentParser(description='Sample argparse py', usage=msg())
parser.add_argument("-arg_1", help='with_some_message')
parser.print_help()

приведенный выше вывод выглядит следующим образом,

usage: program.py
         [-a, Pass argument a]
         [-b, Pass argument b]
         [-c, Pass argument c]
         [-d, Pass argument d]
         comment
         more comment


Sample argparse py

optional arguments:
  -h, --help    show this help message and exit
  -arg_1 ARG_1  with_some_message

Примечание. См. здесь

.Вы также можете вызвать пользовательскую функцию, основанную на вводе аргумента , используя ключевое слово action= аргумент:

>>> class FooAction(argparse.Action):
...     def __call__(self, parser, namespace, values, option_string=None):
...         print '%r %r %r' % (namespace, values, option_string)
...         setattr(namespace, self.dest, values)
...
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action=FooAction)
>>> parser.add_argument('bar', action=FooAction)
>>> args = parser.parse_args('1 --foo 2'.split())
Namespace(bar=None, foo=None) '1' None
Namespace(bar='1', foo=None) '2' '--foo'
>>> args
Namespace(bar='1', foo='2')

Ответ 2

Да, используйте параметр usage. Из документов:

>>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]')
>>> parser.add_argument('--foo', nargs='?', help='foo help')
>>> parser.add_argument('bar', nargs='+', help='bar help')
>>> parser.print_help()
usage: PROG [options]

positional arguments:
 bar          bar help

optional arguments:
 -h, --help   show this help message and exit
 --foo [FOO]  foo help