Отображать справочное сообщение с python argparse, когда скрипт вызывается без каких-либо аргументов

Это может быть просто. Предположим, у меня есть программа, которая использует argparse для обработки аргументов / параметров командной строки. Следующее выведет сообщение «help»:

./myprogram -h 

или:

 ./myprogram --help 

Но, если я запускаю скрипт без каких-либо аргументов, он ничего не делает. Я хочу, чтобы он отображал сообщение об использовании, когда оно вызывается без аргументов. Как это делается?

8 Solutions collect form web for “Отображать справочное сообщение с python argparse, когда скрипт вызывается без каких-либо аргументов”

Этот ответ исходит от Стивена Бетарада в группах Google . Я перепрограммирую его здесь, чтобы облегчить доступ людям, не имеющим учетной записи Google.

Вы можете переопределить поведение метода error по умолчанию:

 import argparse import sys class MyParser(argparse.ArgumentParser): def error(self, message): sys.stderr.write('error: %s\n' % message) self.print_help() sys.exit(2) parser=MyParser() parser.add_argument('foo', nargs='+') args=parser.parse_args() 

Обратите внимание, что вышеприведенное решение будет печатать справочное сообщение всякий раз, когда запускается метод error . Например, test.py --blah также распечатает справочное сообщение, если --blah не является допустимым.

Если вы хотите распечатать справочное сообщение, только если в командной строке не указаны аргументы, возможно, это все же самый простой способ:

 import argparse import sys parser=argparse.ArgumentParser() parser.add_argument('foo', nargs='+') if len(sys.argv)==1: parser.print_help() sys.exit(1) args=parser.parse_args() 

Вместо того, чтобы писать класс, вместо него можно использовать try / except

 try: options = parser.parse_args() except: parser.print_help() sys.exit(0) 

Поверхность заключается в том, что рабочий процесс более ясен, и вам не нужен класс заглушки. Недостатком является то, что первая строка «использования» печатается дважды.

Для этого потребуется хотя бы один обязательный аргумент. Без обязательных аргументов допустимость нулевого аргумента в командной строке действительна.

С помощью argparse вы можете сделать:

 parser.argparse.ArgumentParser() #parser.add_args here #sys.argv includes a list of elements starting with the program if len(sys.argv) < 2: parser.print_usage() sys.exit(1) 

Если у вас есть аргументы, которые должны быть указаны для запуска сценария, используйте требуемый параметр для ArgumentParser, как показано ниже:

 parser.add_argument('--foo', required=True) 

parse_args () сообщит об ошибке, если скрипт запущен без каких-либо аргументов.

Бросив мою версию в кучу:

 import argparse parser = argparse.ArgumentParser() args = parser.parse_args() if not vars(args): parser.print_help() parser.exit(1) 

Вы можете заметить parser.exit – я в основном делаю это так, потому что он сохраняет строку импорта, если это единственная причина для sys в файле …

Если вы связываете функции по умолчанию для (под) парсеров, как указано в add_subparsers , вы можете просто добавить его как действие по умолчанию:

 parser = argparse.ArgumentParser() parser.set_defaults(func=lambda x: parser.print_usage()) args = parser.parse_args() args.func(args) 

Добавьте try-except, если вы делаете исключения из-за отсутствия позиционных аргументов.

Задайте свои позиционные аргументы с помощью nargs и проверьте, пустыми ли позиционные args.

 import argparse parser = argparse.ArgumentParser() parser.add_argument('file', nargs='?') args = parser.parse_args() if not args.file: parser.print_help() 

Ссылки Python nargs

вы можете использовать optparse

from optparse import OptionParser, make_option parser = OptionParser() parser.add_option('--var', help='put the help of the commandline argument') (options, args) = parser.parse_args() ./myprogram --help will print all the help messages for each given argument.
from optparse import OptionParser, make_option parser = OptionParser() parser.add_option('--var', help='put the help of the commandline argument') (options, args) = parser.parse_args() ./myprogram --help will print all the help messages for each given argument. 
Python - лучший язык программирования в мире.