Русские Блоги
Python имеет два встроенных модуля для обработки параметров командной строки:
Один из них — getopt, который также упоминается в книге «Глубоко в Python», который может просто обрабатывать параметры командной строки;
Другой — optparse, который является мощным и простым в использовании, и может легко генерировать стандартные Unix / Posix-совместимые инструкции командной строки.
пример
Вот простой пример использования optparse:
from optparse import OptionParser [. ] parser = OptionParser() parser.add_option("-f", "--file", dest="filename", help="write report to FILE", metavar="FILE") parser.add_option("-q", "--quiet", action="store_false", dest="verbose", default=True, help="don't print status messages to stdout") (options, args) = parser.parse_args()
Теперь вы можете ввести в командной строке:
--file=outfile -q -f outfile --quiet --quiet --file outfile -q -foutfile -qfoutfile
Вышеупомянутые команды имеют такой же эффект. Кроме того, optparse автоматически генерирует для нас справочную информацию из командной строки:
usage: [options] options: -h, --help show this help message and exit -f FILE, --file=FILE write report to FILE -q, --quiet don't print status messages to stdout
Простой процесс
Сначала вы должны импортировать класс OptionParser и создать объект OptionParser:
from optparse import OptionParser [. ] parser = OptionParser()
Затем используйте add_option для определения параметров командной строки:
parser.add_option(opt_str, . attr=value, . )
Каждый параметр командной строки состоит из строки имени параметра и атрибута параметра. Такие как -fИли–fileЭто длинные и короткие имена параметров:
Наконец, как только вы определили все параметры командной строки, вызовите parse_args () для анализа командной строки программы:
(options, args) = parser.parse_args()
Заметка:Вы также можете передать список аргументов командной строки в parse_args (); в противном случае по умолчанию используется sys.argv [: 1].
Два значения, возвращаемые parse_args ():
- options, это объект (optpars.Values), который содержит значения параметров командной строки. Если вам известно имя параметра командной строки, например file, вы можете получить доступ к его соответствующему значению: options.file.
- args, который представляет собой список позиционных аргументов.
Actions
action — один из параметров метода parse_args (), который указывает optparse, что делать, когда он анализирует аргумент командной строки. действия имеют набор фиксированных значений на выбор, по умолчанию ’store‘Означает сохранение значения параметра командной строки в объекте параметров.
- parser.add_option(«-f», «—file»,
- action=»store», type=»string», dest=»filename»)
- args = [«-f», «foo.txt»]
- (options, args) = parser.parse_args(args)
- print options.filename
Наконец, будет распечатан «foo.txt».
Когда optparse анализирует «-f», он продолжит анализ следующего «foo.txt», а затем сохранит «foo.txt» в options.filename. Когда вызывается parser.args (), значение options.filename равно «foo.txt».
Вы также можете указать параметр типа в методе add_option () для других значений, таких как int или float и т. Д .:
parser.add_option("-n", type="int", dest="num")
По умолчанию тип — «строка». Как показано выше, длинные имена параметров также необязательны. Фактически, параметр dest также необязателен. Если параметр dest не указан, имя параметра командной строки будет использоваться для доступа к значению объекта параметров.
У магазина также есть две другие формы:store_true с участием store_falseОн используется для обработки случая, когда после параметра командной строки нет значения. Параметры командной строки, такие как -v, -q:
parser.add_option("-v", action="store_true", dest="verbose") parser.add_option("-q", action="store_false", dest="verbose")
В этом случае при синтаксическом анализе с «-v» параметру options.verbose будет присвоено значение True, в противном случае при синтаксическом анализе с «-q» будет присвоено значение False.
К другим значениям действий относятся:
store_const 、append 、count 、callback 。
По умолчанию
Метод parse_args () предоставляет параметр по умолчанию для установки значения по умолчанию. Такие как:
parser.add_option("-f","--file", action="store", dest="filename", default="foo.txt") parser.add_option("-v", action="store_true", dest="verbose", default=True)
Или используйте set_defaults ():
parser.set_defaults(filename="foo.txt",verbose=True) parser.add_option(. ) (options, args) = parser.parse_args()
Создать справку по программе
Еще одна удобная функция optparse — автоматическое создание справочной информации для программы. Вам нужно только указать текст справочного сообщения для параметра справки метода add_option ():
usage = "usage: %prog [options] arg1 arg2" parser = OptionParser(usage=usage) parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=True, help="make lots of noise [default]") parser.add_option("-q", "--quiet", action="store_false", dest="verbose", help="be vewwy quiet (I'm hunting wabbits)") parser.add_option("-f", "--filename", metavar="FILE", help="write output to FILE"), parser.add_option("-m", "--mode", default="intermediate", help="interaction mode: novice, intermediate, " "or expert [default: %default]")
Когда optparse анализирует параметры командной строки -h или -help, он вызывает parser.print_help () для печати справочной информации программы:
usage: [options] arg1 arg2 options: -h, --help show this help message and exit -v, --verbose make lots of noise [default] -q, --quiet be vewwy quiet (I'm hunting wabbits) -f FILE, --filename=FILE write output to FILE -m MODE, --mode=MODE interaction mode: novice, intermediate, or expert [default: intermediate]
нота:После вывода справочной информации optparse завершит работу без анализа других параметров командной строки.
В приведенном выше примере шаг за шагом объясняется, как создавать справочную информацию:
- Информация об использовании программы, определяемая пользователем (сообщение об использовании): Код Python
usage = "usage: %prog [options] arg1 arg2"
usage = "usage: %prog [options] arg1 arg2"
- Когда пользователь определяет справочную информацию для параметров командной строки, не нужно беспокоиться о проблемах, вызванных разрывами строк, optparse справится со всем этим.
- Установка параметра metavar в методе add_option помогает напомнить пользователям об ожидаемых параметрах параметра командной строки, таких как metavar = «mode»: Код Python нота:Строка в параметре metavar автоматически станет прописной.
Используйте% default в справочной информации параметра help, чтобы вставить значение по умолчанию для параметра командной строки.
Если в программе много параметров командной строки, вы можете сгруппировать их, тогда вы можете использовать OptonGroup:
group = OptionGroup(parser, ``Dangerous Options'', ``Caution: use these options at your own risk. `` ``It is believed that some of them bite.'') group.add_option(``-g'', action=''store_true'', help=''Group option.'') parser.add_option_group(group)
Ниже приводится справочное сообщение, которое будет напечатано:
usage: [options] arg1 arg2 options: -h, --help show this help message and exit -v, --verbose make lots of noise [default] -q, --quiet be vewwy quiet (I'm hunting wabbits) -fFILE, --file=FILE write output to FILE -mMODE, --mode=MODE interaction mode: one of 'novice', 'intermediate' [default], 'expert' Dangerous Options: Caution: use of these options is at your own risk. It is believed that some of them bite. -g Group option
Показать версию программы
Как и в сообщении об использовании, вы можете указать параметр версии при создании объекта OptionParser для отображения информации о версии текущей программы:
parser = OptionParser(usage="%prog [-f] [-q]", version="%prog 1.0")
Таким образом, optparse автоматически интерпретирует параметр командной строки —version:
Обработка исключения
Включая исключения программ и исключения пользователей. Основное обсуждение здесь — пользовательские исключения, которые являются исключениями, вызванными вводом пользователем недопустимых или неполных параметров командной строки. optparse может автоматически обнаруживать и обрабатывать некоторые пользовательские аномалии:
$ /usr/bin/foo -n 4x usage: foo [options] foo: error: option -n: invalid integer value: '4x' $ /usr/bin/foo -n usage: foo [options] foo: error: -n option requires an argument
Пользователи также могут использовать метод parser.error () для настройки обработки некоторых исключений:
(options, args) = parser.parse_args() [. ] if options.a and options.b: parser.error("options -a and -b are mutually exclusive")
В приведенном выше примере, когда параметры командной строки -b и -b существуют одновременно, он распечатает «параметры -a и -b являются взаимоисключающими», чтобы предупредить пользователя.
Если указанные выше методы обработки исключений не могут соответствовать требованиям, вам может потребоваться унаследовать класс OptionParser и перегрузить методы exit () и erro ().
Полный пример программы
from optparse import OptionParser [. ] def main(): usage = "usage: %prog [options] arg" parser = OptionParser(usage) parser.add_option("-f", "--file", dest="filename", help="read data from FILENAME") parser.add_option("-v", "--verbose", action="store_true", dest="verbose") parser.add_option("-q", "--quiet", action="store_false", dest="verbose") [. ] (options, args) = parser.parse_args() if len(args) != 1: parser.error("incorrect number of arguments") if options.verbose: print "reading %s. " % options.filename [. ] if __name__ == "__main__": main()