Инструменты в модуле 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). В следующей главе еще будет говориться