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

Инструменты в модуле os

Бросим беглый взгляд на основные интерфейсы в модуле os. В табл. 2.1 приводится список наиболее часто используемых инструментов из модуля os, организованных по функциональному назначению.

Таблица 2.1. Часто используемые инструменты из модуля os

Область применения

Инструменты

Переменные окружения

os.environ

Запуск программ

os.system, os.popen, os.execv, os.spawnv

Порождение дочерних процессов

os.fork, os.pipe, os.waitpid, os.kill

Дескрипторы файлов, блокировки

os.open, os.read, os.write

Обработка файлов

os.remove, os.rename, os.mkfifo, os.mkdir, os. rmdir

Инструменты администрирования

os.getcwd, os.chdir, os.chmod, os.getpid, os.listdir, os.access

Инструменты обеспечения переносимости

os.sep, os.pathsep, os.curdir, os.path.split, os.path.join

Инструменты для работы с путями к каталогам

os.path.exists(‘path’), os.path.isdir(‘path’), o s.p at h.g et s i z e (‘p a t h’)

Если попробовать получить перечень атрибутов этого модуля в интерактивном режиме, получится громадный список имен, который будет различным для разных версий Python. Скорее всего, он будет зависеть от платформы и не будет слишком полезен, если не изучить, что означает каждое имя (я позволил себе немного отформатировать этот список и удалить часть строк для экономии места - запустите эту команду у себя):

>>> import os >>> dir(os)

[‘F_OK’, ‘MutableMapping’, ‘O_APPEND’, ‘O_BINARY’, ‘O_CREAT’, ‘O_EXCL’, ‘O_ NOINHERIT’, ‘O_RANDOM’, ‘O_RDONLY’, ‘ O_RDWR’, ‘ O_SEQUENTIAL’, ‘ O_SHORT_LIVED’,

‘O_TEMPORARY’, ‘O_TEXT’, ‘O_TRUNC’, ‘O_WRONLY’, ‘P_DETACH’, ‘P_NOWAIT’, ‘P_ NOWAITO’, ‘P_OVERLAY’, ‘P_WAIT’, ‘ R_OK’, ‘ SEEK_CUR’, ‘ SEEK_END’, ‘ SEEK_SET’, ‘TMP_MAX’,

...здесь было удалено 9 строк...

‘pardir’, ‘path’, ‘pathsep’, ‘pipe’, ‘popen’, ‘putenv’, ‘read’, ‘remove’, ‘rem ovedirs’, ‘rename’, ‘renames’, ‘rmdir’, ‘sep’, ‘spawnl’, ‘spawnle’, ‘spawnv’, ‘spawnve’, ‘startfile’, ‘stat’, ‘stat_float_times’, ‘stat_result’, ‘statvfs_ result’, ‘strerror’, ‘sys’, ‘system’, ‘times’, ‘umask’, ‘unlink’, ‘urandom’, ‘utime’, ‘waitpid’, ‘walk’, ‘write’]

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

>>> dir(os.path)

[‘__all__’, ‘__builtins__’, ‘__doc__’, ‘__file__’, ‘__name__’, ‘__package__’, ‘_get_altsep’, ‘_get_bothseps’, ‘_get_colon’, ‘_get_dot’, ‘_get_empty’, ‘_ get_sep’, ‘_getfullpathname’, ‘abspath’, ‘altsep’, ‘basename’, ‘commonprefix’, ‘curdir’, ‘defpath’, ‘devnull’, ‘dirname’, ‘exists’, ‘expanduser’, ‘expandvars’, ‘extsep’, ‘genericpath’, ‘getatime’, ‘getctime’, ‘getmtime’, ‘getsize’,

‘isabs’, ‘isdir’, ‘isfile’, ‘islink’, ‘ismount’, ‘join’, ‘lexists’, ‘normcase’, ‘normpath’, ‘os’, ‘pardir’, ‘pathsep’, ‘realpath’, ‘relpath’, ‘sep’, ‘split’, ‘splitdrive’, ‘splitext’, ‘splitunc’, ‘stat’, ‘supports_unicode_filenames’,

‘sys’]

Средства администрирования

Если вы полагаете, что приведения этих огромных листингов недостаточно, чтобы двинуться дальше, давайте поэкспериментируем с некоторыми из простейших инструментов модуля os в интерактивной оболочке. Как и модуль sys, модуль os содержит набор инструментов для получения информации и администрирования:

>>> os.getpid()

7980

>>> os.getcwd()

‘C:\\PP4thEd\\Examples\\PP4E\\System’

>>> os.chdir(r'C:\Users')

>>> os.getcwd()

‘C:\\Users’

Здесь видно, что функция os.getpid возвращает числовой идентификатор (ID) процесса (уникальный идентификатор выполняющейся программы, определяемый системой), а функция os.getcwd возвращает текущий рабочий каталог. Текущим рабочим каталогом является тот, в котором предполагается нахождение файлов, открываемых сценарием, если в их именах явно не указан путь к каталогу. Вот почему ранее я предлагал запустить следующую команду именно в том каталоге, где находится файл more.py:

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

Аргумент с именем входного файла здесь задан без явного пути к каталогу (хотя его можно указать, чтобы обеспечить постраничный вывод файлов из другого каталога). Если потребуется назначить текущим другой каталог, вызовите функцию os.chdir: ваш программный код будет выполняться относительно нового каталога до конца программы (или нового вызова os.chdir). В следующей главе еще будет говориться