Выбрать главу

$ ./python.exe

Python 3.1.1 (r311:74480, Feb 20 2010, 10:16:52)

[GCC 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)] on cygwin Type "help”, "copyright”, "credits” or "license” for more information.

>>> import sys, os >>> len(dir(sys))

64

>>> len(dir(os))

217

>>> len(dir(os.path))

51

Я не собираюсь представлять все элементы в каждом встроенном модуле, поэтому прежде всего я хочу показать, как самостоятельно получать более подробную информацию. Такая задача может служить формальным оправданием тому, что здесь будут представлены некоторые базовые понятия системного программирования. Попутно мы напишем код первого сценария для форматирования документации.

Системные модули Python

Большинство интерфейсов Python системного уровня находится всего в двух модулях: sys и os. Впрочем, это несколько упрощенное представление - к данной области относятся и другие стандартные модули. В их числе:

glob

Реализует механизм подстановки имен файлов

socket

Обеспечивает возможности создания сетевых соединений и взаимодействий между процессами (Inter-Process Communication, IPC)

threading, _thread, queue

Средства запуска и синхронизации параллельных потоков выполнения

time, timeit

Обеспечивают возможность получения информации о системном времени

subprocess, multiprocessing

Средства запуска и управления параллельными процессами

signal, select, shutil, tempfile и другие Для решения других системных задач

Некоторые сторонние расширения, такие как pySerial (интерфейс к последовательному порту), Pexpect (механизм управления взаимодействиями между программами, напоминающий утилиту Expect) и даже Twisted (сетевой фреймворк), также могут быть отнесены к разряду системных инструментов. Кроме того, некоторые встроенные функции также в действительности являются системными интерфейсами -функция open, например, обеспечивает интерфейс к файловой системе. Но в общем и целом ядро арсенала системных инструментов Python образуют модули sys и os.

В теории, по крайней мере, модуль sys экспортирует компоненты, относящиеся к самому интерпретатору Python (например, путь поиска модулей), a модуль os содержит переменные и функции, соответствующие операционной системе, в которой выполняется Python. На практике это различие может быть не столь отчетливым (например, стандартные потоки ввода и вывода находятся в модуле sys, но можно утверждать, что они связаны с парадигмами операционной системы). Могу вас обрадовать: инструменты, находящиеся в этих модулях, будут использоваться так часто, что их местонахождение прочно отпечатается в вашей памяти.4

Модуль os пытается также предоставить переносимый интерфейс программирования для используемой операционной системы: его функции могут быть по-разному реализованы на различных платформах, но для сценариев на языке Python они выглядят одинаково. Кроме того, модуль os экспортирует вложенный подмодуль os.path, предоставляющий переносимый интерфейс к средствам обработки файлов и каталогов.

Источники документации по модулям

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

Например, если потребуется узнать, какие элементы экспортирует встроенный модуль, можно прочесть соответствующий раздел руководства по библиотеке, исследовать его исходный код (все-таки Python является открытым программным обеспечением) или получить список атрибутов и строку документации в интерактивном режиме. Давайте импортируем модуль sys в Python 3.1 и посмотрим, что в нем находится:

C:\...\PP4E\System> python >>> import sys >>> dir(sys)

[‘__displayhook__’, ‘__doc__’, ‘__excepthook__’, ‘__name__’, ‘__package__’,

‘__stderr__’, ‘__stdin__’, ‘__stdout__’, ‘_clear_type_cache’, ‘_current_

frames’, ‘_getframe’, ‘api_version’, ‘argv’, ‘builtin_module_names’, ‘byteorder’,’call_tracing’, ‘callstats’, ‘copyright’, ‘displayhook’,

‘dllhandle’, ‘dont_write_bytecode’, ‘exc_info’, ‘excepthook’, ‘exec_ prefix’, ‘executable’, ‘exit’, ‘flags’, ‘float_info’, ‘float_repr_style’, ‘getcheckinterval’, ‘getdefaultencoding’, ‘getfilesystemencoding’,

‘getprofile’, ‘getrecursionlimit’, ‘getrefcount’, ‘getsizeof’, ‘gettrace’, ‘getwindowsversion’, ‘hexversion’, ‘int_info’, ‘intern’, ‘maxsize’,

‘maxunicode’, ‘meta_path’, ‘modules’, ‘path’, ‘path_hooks’, ‘path_importer_ cache’, ‘platform’, ‘prefix’, ‘ps1’, ‘ps2’,

‘setcheckinterval’, ‘setfilesystemencoding’, ‘setprofile’, ‘setrecursionlimit’, ‘settrace’, ‘stderr’, ‘stdin’, ‘stdout’, ‘subversion’, ‘version’, ‘version_ info’, ‘warnoptions’, ‘winver’]