| Простые шаблоны использования optparse Шаблон использования без ключей |
|
В предыдущем разделе мы упоминали, что модуль optparse может с успехом использоваться даже в маленьких сценариях. В примере 13.5 показан простой шаблон использования модуля optparse, где сценарий не предусматривает наличие ключей командной строки, что не мешает ему использовать преимущества optparse. Пример 13.5. Клон команды. ls
В этом примере мы реализовали на языке Python свою версию команды ls, которая принимает единственный аргумент - путь к каталогу, содержимое которого требуется вывести. Мы не предусматриваем даже наличие дополнительных ключей, но по-прежнему можем пользоваться возможностями модуля optparse, опираясь на них при выборе пути выполнения программы. Сначала при создании экземпляра класса OptionParser мы предоставляем некоторую информацию о реализации и добавляем инструкции о порядке использования для потенциальных пользователей инструмента. Затем мы проверяем количество аргументов, и если их число больше или меньше одного, мы выводим инструкцию о порядке использования инструмента с помощью метода p. print_help(). Ниже приводится пример правильного использования нашего инструмента, которому передается имя текущего каталога «.»:
А теперь посмотрим, что произойдет, если запустить сценарий без аргументов:
Интересно, что поведение, связанное с вызовом метода p. print_help(), которое мы определили для случая запуска сценария, когда число аргументов не равно точно одному, равносильно запуску сценария с ключом --help:
А так как мы определили параметр --version, то при его использовании мы получим следующее:
В этом примере модуль optparse оказался полезен даже при создании «разового» сценария, который может не получить дальнейшего развития. Шаблон true/false Бывает очень удобно иметь возможность установить некоторый признак в значение true или false. Классическим примером такого шаблона могут служить ключи: --quiet, который подавляет вывод в поток стандартного вывода, и --verьose, при установке которого программа переходит в режим вывода более подробной информации. В примере 13.6 показано, как это может выглядеть: Пример 13.6. Увеличение и уменьшение подробности вывода
Теперь в режиме подробного вывода:
Используя ключ --verbose, мы тем самым повышаем уровень подробности информации, выводимой в поток стандартного вывода. Посмотрим, какая информация выводится на каждом из уровней подробности. Сначала нормальный уровень: Когда мы указываем ключ --verbose, атрибут options, verbose получает значение true, в результате чего выполняется условие и вызывается инструкция, которая выводит «Filename:» перед фактическим именем файла. Обратите внимание, что в этом сценарии при вызове метода p.add_option() мы определили параметры default=False и action="sto-re_true", указав тем самым, что по умолчанию этот параметр будет иметь значение false, но если при вызове сценария будет указан ключ --verbose, этот параметр приобретет значение true. В этом заключается сущность использования логических параметров с модулем optparse. Шаблон подсчета числа параметров Если при использовании типичного инструмента командной строки операционной системы UNIX, например tcpdump, указать параметр -VW, вы получите намного более подробный вывод, чем при использовании параметра -w или -v. Вы можете реализовать аналогичное поведение, воспользовавшись такой возможностью модуля optparse, как подсчет количества одинаковых параметров. Например, если вам потребуется снабдить свой сценарий аналогичными уровнями подробности вывода, вы могли бы сделать это, как показано в примере 13.7. Пример 13.7. Шаблон с подсчетом упоминаний параметра
При использовании шаблона проектирования с автоматическим подсчетом упоминаний параметра мы можем на основе единственного параметра реализовать три варианта действий. Когда этот сценарий вызывается с ключом -v, атрибут options, verbose получает значение 1; когда сценарий вызывается с ключом -vv, атрибут options, verbose получает значение 2. Наш сценарий при вызове без ключей просто выводит имена файлов, при вызове с ключом -v он выводит слово «Filename:» перед каждым именем файла и, наконец, когда сценарий вызывается с ключом -vv, он выводит не только имя файла, но и его размер в байтах. Ниже показан результат вызова сценария с ключом -vv:
Шаблон с вариантами значений параметра Иногда бывает необходимо предоставить несколько возможных значений параметра. В нашем последнем примере мы создали параметры --verbose и --quiet, но точно так же мы могли бы реализовать их как возможные варианты значений параметра --chatty. В примере 13.8 показано, как выглядит версия предыдущего примера, переделанная для использования вариантов значений. Пример 13.8. Шаблон с вариантами значений параметра
Если запустить эту команду с параметром без значения, как это делалось в предыдущем примере, будет получено следующее сообщение об ошибке:
Если указать в параметре ошибочный аргумент, будет получено другое сообщение об ошибке, где будут указаны допустимые значения:
Одно из удобств использования вариантов значений состоит в том, что в этом случае сценарий не полагается на то, что подойдет любое введенное пользователем значение аргумента. Пользователю позволяется выбирать только из тех значений, которые вы определите. Ниже показано, как выполняется команда при запуске с допустимым значением параметра:
Если вы обратили внимание, в первой строке вывода указано слово «chatty» как ключ, а слово «verbose» как значение. В примере выше мы добавили инструкцию print для вывода атрибута options, чтобы показать вам, как он выглядит с точки зрения программы. В заключение ниже приводится пример запуска программы со значение quiet в параметре --chatty:
Шаблон использования параметров с несколькими аргументами По умолчанию для каждого параметра модуль optparse принимает только один аргумент, но существует возможность определить любое число аргументов. В примере 13.9 приводится сценарий, представляющий собой еще одну версию команды ls, который может выводить содержимое сразу двух каталогов. Пример 13.9. Вывод содержимого двух каталогов
Указав требуемое число аргументов параметра --dir, мы получили следующее:
Если попробовать запустить этот сценарий с единственным аргументом параметра --dir, будет получено следующее сообщение об ошибке:
Related Articles
Set as favorite
Bookmark
Email This
Hits: 570 Комментарии (0)RSS feed CommentsНаписать комментарий |