Два способа использования программ

dva sposoba ispolzovaniya programm Системные инструменты

Последние несколько строк в сценарии more.py из примера 2.1 знакомят нас с одним из первых важных понятий в программировании инструментов командной строки. Они настраивают файл так, чтобы его можно было использовать двумя способами: как сценарий или как библиотеку.

Напомню, что в каждом модуле Python доступна встроенная переменная __name__, в которую интерпретатор Python записывает значение __main__, только если файл выполняется как программа, а не импортируется в качестве библиотеки. Благодаря этому функция more в этом файле автоматически выполняется в последней строке файла, когда сценарий запускается, как самостоятельная программа, а не импортируется в какое-либо другое место. Этот простой прием является ключом к созданию многократно используемых сценариев: благодаря реализации логики программы в виде функции, а не в виде программного кода верхнего уровня, ее можно импортировать и повторно использовать в других сценариях.

В результате появляется возможность запускать more.py отдельно или импортировать его и вызывать функцию more из любого другого места. При запуске файла как самостоятельной программы мы передаем ей в командной строке имя файла, который нужно прочесть и выводить постранично: в следующей главе будет полностью описано, как слова, вводимые в команде для запуска программы, появляются во встроенном списке sys.argv. Ниже приводится пример запуска файла сценария для постраничного вывода самого себя (эта команда должна выполняться в каталоге PP4E\System, иначе входной файл не будет найден; причина этого будет пояснена позднее):

C:\\PP4E\System> python more.py more.py

разбивает строку или текстовый файл на страницы для интерактивного просмотра

def more(text, numlines=15):

lines = text.splitlines() # подобно split(‘\n’), но без ‘’ в конце

while lines:

chunk = lines[:numlines] lines = lines[numlines:] for line in chunk: print(line)

More?y

if lines and input(‘More?’) not in [‘y’, ‘Y’]: break

if __name__ == ‘__main__’:

import sys # если запускается как сценарий

more(open(sys.argv[1]).read(), 10) # отобразить постранично содержимое

# файла, указанного в командной строке

Если мы импортируем файл more.py, мы явно передаем строку в его функцию more; функция more — как раз такая утилита, которая нам нужна для просмотра текста документации. Запуск этой утилиты для просмотра строки документации модуля sys представит информацию о том, какие возможности дает этот модуль сценариям, в виде, пригодном для чтения:

C:\\PP4E\System> python

>  >> from more import more

>  >> import sys

>  >> more(sys.__doc__)

This module provides access to some objects used or maintained by the interpreter and to functions that interact strongly with the interpreter.

Dynamic objects:

argv command line arguments; argv[0] is the script pathname if known path module search path; path[0] is the script directory, else ‘’ modules dictionary of loaded modules

displayhook called to show results in an interactive session

excepthook called to handle any uncaught exception other than SystemExit To customize printing in an interactive session or to install a custom top-level exception handler, assign other functions to replace these.

stdin standard input file object; used by input() More?

Нажатие клавиши у или Y заставит функцию отобразить несколько следующих строк документации и снова вывести приглашение, если список строк еще не закончился. Попробуйте сделать это у себя, и вы увидите, как выглядит оставшаяся часть строки документации. Кроме того, попробуйте поэкспериментировать, задавая размер окна во втором аргументе, — вызов more(sys.__doc__, 5) будет выводить текст блоками по 5 строк.

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий