os.md
1> **Источник:** https://python-all.ru/3.2/library/os.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 15.1. [`os`](https://python-all.ru/3.2/library/os.html#module-os) – Различные интерфейсы операционной системы89Этот модуль предоставляет переносимый способ использования функциональности, зависящей от операционной системы. Если нужно просто прочитать или записать файл, см. [`open()`](https://python-all.ru/3.2/library/functions.html#open); для работы с путями предназначен модуль [`os.path`](https://python-all.ru/3.2/library/os.path.html#module-os.path); а если нужно прочитать все строки из всех файлов, указанных в командной строке – модуль [`fileinput`](https://python-all.ru/3.2/library/fileinput.html#module-fileinput). Для создания временных файлов и каталогов предназначен модуль [`tempfile`](https://python-all.ru/3.2/library/tempfile.html#module-tempfile), а для высокоуровневой работы с файлами и каталогами – модуль [`shutil`](https://python-all.ru/3.2/library/shutil.html#module-shutil).1011Примечания о доступности этих функций:1213- Все встроенные модули Python, зависящие от операционной системы, спроектированы так, что везде, где доступна одна и та же функциональность, используется один и тот же интерфейс. Например, функция `os.stat(path)` возвращает информацию stat о *path* в одном и том же формате (который, как оказалось, берёт начало от интерфейса POSIX).14- Расширения, характерные для конкретной операционной системы, также доступны через модуль [`os`](https://python-all.ru/3.2/library/os.html#module-os), однако их использование, конечно, угрожает переносимости.15- Все функции, принимающие пути или имена файлов, принимают как объекты bytes, так и строки, и возвращают объект того же типа, если возвращается путь или имя файла.16- Примечание «Доступность: Unix» означает, что эта функция обычно встречается в системах Unix. Оно не утверждает о её существовании в конкретной операционной системе.17- Если не указано иное, все функции, для которых указано «Доступность: Unix», поддерживаются на Mac OS X, построенной на ядре Unix.1819> **Примечание**20>21> Все функции этого модуля возбуждают исключение [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError) в случае некорректных или недоступных имён файлов и путей, а также других аргументов, имеющих правильный тип, но не принимаемых операционной системой.2223#### `exception os.error`2425Псевдоним встроенного исключения [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError).2627#### `os.name`2829Имя импортированного модуля, зависящего от операционной системы. В настоящее время зарегистрированы следующие имена: `'posix'`, `'nt'`, `'mac'`, `'os2'`, `'ce'`, `'java'`.3031> **См. также**32>33> [`sys.platform`](https://python-all.ru/3.2/library/sys.html#sys.platform) имеет более тонкую гранулярность. [`os.uname()`](https://python-all.ru/3.2/library/os.html#os.uname) возвращает информацию о версии, зависящую от системы.34>35> Модуль [`platform`](https://python-all.ru/3.2/library/platform.html#module-platform) предоставляет подробные проверки идентификационных данных системы.3637## 15.1.1. Имена файлов, аргументы командной строки и переменные окружения3839В Python имена файлов, аргументы командной строки и переменные окружения представлены строковым типом. На некоторых системах перед передачей операционной системе необходимо декодировать эти строки в байты и обратно. Python использует кодировку файловой системы для выполнения этого преобразования (см. [`sys.getfilesystemencoding()`](https://python-all.ru/3.2/library/sys.html#sys.getfilesystemencoding)).4041Изменено в версии 3.1: На некоторых системах преобразование с использованием кодировки файловой системы может завершиться неудачей. В этом случае Python использует обработчик ошибок кодирования `surrogateescape`, что означает, что нераскодируемые байты заменяются на символ Unicode U+DCxx при декодировании, и затем они снова преобразуются в исходный байт при кодировании.4243Кодировка файловой системы должна гарантировать успешное декодирование всех байтов ниже 128. Если кодировка файловой системы не может этого гарантировать, функции API могут вызывать исключения Unicode.4445## 15.1.2. Параметры процесса4647Эти функции и элементы данных предоставляют информацию о текущем процессе и пользователе, а также позволяют с ними работать.4849#### `os.environ`5051Объект [*отображения*](https://python-all.ru/3.2/glossary.html#term-mapping), представляющий строковое окружение. Например, `environ['HOME']` – это путь к домашнему каталогу (на некоторых платформах), и эквивалентно `getenv("HOME")` в C.5253Это отображение фиксируется при первом импорте модуля [`os`](https://python-all.ru/3.2/library/os.html#module-os), обычно во время запуска Python в рамках обработки `site.py`. Изменения окружения, сделанные после этого, не отражаются в `os.environ`, за исключением изменений, внесённых непосредственным изменением `os.environ`.5455Если платформа поддерживает функцию [`putenv()`](https://python-all.ru/3.2/library/os.html#os.putenv), это отображение может использоваться как для изменения, так и для запроса окружения. [`putenv()`](https://python-all.ru/3.2/library/os.html#os.putenv) будет вызываться автоматически при изменении отображения.5657В Unix ключи и значения используют [`sys.getfilesystemencoding()`](https://python-all.ru/3.2/library/sys.html#sys.getfilesystemencoding) и обработчик ошибок `'surrogateescape'`. Используйте [`environb`](https://python-all.ru/3.2/library/os.html#os.environb), если нужна другая кодировка.5859> **Примечание**60>61> Прямой вызов [`putenv()`](https://python-all.ru/3.2/library/os.html#os.putenv) не изменяет `os.environ`, поэтому лучше изменять `os.environ`.6263> **Примечание**64>65> На некоторых платформах, включая FreeBSD и Mac OS X, установка `environ` может вызывать утечки памяти. Обратитесь к системной документации по `putenv()`.6667Если [`putenv()`](https://python-all.ru/3.2/library/os.html#os.putenv) не предусмотрена, изменённая копия этого отображения может быть передана соответствующим функциям создания процессов, чтобы дочерние процессы использовали изменённое окружение.6869Если платформа поддерживает функцию [`unsetenv()`](https://python-all.ru/3.2/library/os.html#os.unsetenv), можно удалять элементы из этого отображения для снятия переменных окружения. [`unsetenv()`](https://python-all.ru/3.2/library/os.html#os.unsetenv) будет вызываться автоматически при удалении элемента из `os.environ`, а также при вызове одного из методов `pop()` или `clear()`.7071#### `os.environb`7273Байтовая версия [`environ`](https://python-all.ru/3.2/library/os.html#os.environ): объект [*отображения*](https://python-all.ru/3.2/glossary.html#term-mapping), представляющий окружение в виде байтовых строк. [`environ`](https://python-all.ru/3.2/library/os.html#os.environ) и [`environb`](https://python-all.ru/3.2/library/os.html#os.environb) синхронизируются (изменение [`environb`](https://python-all.ru/3.2/library/os.html#os.environb) обновляет [`environ`](https://python-all.ru/3.2/library/os.html#os.environ) и наоборот).7475[`environb`](https://python-all.ru/3.2/library/os.html#os.environb) доступен только если [`supports_bytes_environ`](https://python-all.ru/3.2/library/os.html#os.supports_bytes_environ) равно True.7677Новое в версии 3.2.7879#### `os.chdir(path)`8081#### `os.fchdir(fd)`8283#### `os.getcwd()`8485Эти функции описаны в [*Files and Directories*](https://python-all.ru/3.2/library/os.html#os-file-dir).8687#### `os.fsencode(filename)`8889Кодирует *filename* в кодировку файловой системы с обработчиком ошибок `'surrogateescape'` или `'strict'` в Windows; возвращает [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) без изменений.9091[`fsdecode()`](https://python-all.ru/3.2/library/os.html#os.fsdecode) – это обратная функция.9293Новое в версии 3.2.9495#### `os.fsdecode(filename)`9697Декодирует *filename* из кодировки файловой системы с обработчиком ошибок `'surrogateescape'` или `'strict'` в Windows; возвращает [`str`](https://python-all.ru/3.2/library/functions.html#str) без изменений.9899[`fsencode()`](https://python-all.ru/3.2/library/os.html#os.fsencode) – это обратная функция.100101Новое в версии 3.2.102103#### `os.get_exec_path(env=None)`104105Возвращает список каталогов, в которых будет производиться поиск указанного исполняемого файла, аналогично командной оболочке, при запуске процесса. Если передан аргумент *env*, он должен быть словарём переменных окружения, в котором ищется PATH. По умолчанию, когда *env* равен None, используется [`environ`](https://python-all.ru/3.2/library/os.html#os.environ).106107Новое в версии 3.2.108109#### `os.ctermid()`110111Возвращает имя файла, соответствующее управляющему терминалу процесса.112113Доступность: Unix.114115#### `os.getegid()`116117Возвращает эффективный идентификатор группы текущего процесса. Это соответствует биту «set id» у файла, выполняемого в текущем процессе.118119Доступность: Unix.120121#### `os.geteuid()`122123Возвращает эффективный идентификатор пользователя текущего процесса.124125Доступность: Unix.126127#### `os.getgid()`128129Возвращает реальный идентификатор группы текущего процесса.130131Доступность: Unix.132133#### `os.getgroups()`134135Возвращает список дополнительных идентификаторов групп, связанных с текущим процессом.136137Доступность: Unix.138139> **Примечание**140>141> В Mac OS X поведение [`getgroups()`](https://python-all.ru/3.2/library/os.html#os.getgroups) несколько отличается от других Unix-платформ. Если интерпретатор Python был собран с целевой версией развёртывания `10.5` или более ранней, [`getgroups()`](https://python-all.ru/3.2/library/os.html#os.getgroups) возвращает список эффективных идентификаторов групп, связанных с процессом текущего пользователя; этот список ограничен определяемым системой количеством записей, обычно 16, и может быть изменён вызовами [`setgroups()`](https://python-all.ru/3.2/library/os.html#os.setgroups) при наличии соответствующих привилегий. Если сборка выполнена с целевой версией развёртывания больше `10.5`, [`getgroups()`](https://python-all.ru/3.2/library/os.html#os.getgroups) возвращает текущий список доступных групп для пользователя, связанного с эффективным идентификатором пользователя процесса; этот список может меняться в течение времени жизни процесса, на него не влияют вызовы [`setgroups()`](https://python-all.ru/3.2/library/os.html#os.setgroups), и его длина не ограничена 16. Значение целевой версии развёртывания, `MACOSX_DEPLOYMENT_TARGET`, можно получить с помощью [`sysconfig.get_config_var()`](https://python-all.ru/3.2/library/sysconfig.html#sysconfig.get_config_var).142143#### `os.initgroups(username, gid)`144145Вызывает системную функцию initgroups() для инициализации списка доступа к группам, который включает все группы, в которые входит указанное имя пользователя, а также указанный идентификатор группы.146147Доступность: Unix.148149Новое в версии 3.2.150151#### `os.getlogin()`152153Возвращает имя пользователя, вошедшего в систему на управляющем терминале процесса. Для большинства целей удобнее использовать переменные окружения `LOGNAME` или `USERNAME`, чтобы узнать, кто пользователь, или `pwd.getpwuid(os.getuid())[0]` для получения имени входа текущего реального идентификатора пользователя.154155Доступность: Unix, Windows.156157#### `os.getpgid(pid)`158159Возвращает идентификатор группы процессов для процесса с идентификатором *pid*. Если *pid* равен 0, возвращается идентификатор группы текущего процесса.160161Доступность: Unix.162163#### `os.getpgrp()`164165Возвращает идентификатор текущей группы процессов.166167Доступность: Unix.168169#### `os.getpid()`170171Возвращает идентификатор текущего процесса.172173Доступность: Unix, Windows.174175#### `os.getppid()`176177Возвращает идентификатор родительского процесса. Когда родительский процесс завершился, в Unix возвращается идентификатор процесса init (1), а в Windows – тот же самый идентификатор, который к тому моменту может быть уже занят другим процессом.178179Доступность: Unix, Windows180181Изменено в версии 3.2: Добавлена поддержка Windows.182183#### `os.getresuid()`184185Возвращает кортеж (ruid, euid, suid), обозначающий реальный, эффективный и сохранённый идентификаторы пользователя текущего процесса.186187Доступность: Unix.188189Новое в версии 3.2.190191#### `os.getresgid()`192193Возвращает кортеж (rgid, egid, sgid), обозначающий реальный, эффективный и сохранённый идентификаторы группы текущего процесса.194195Доступность: Unix.196197Новое в версии 3.2.198199#### `os.getuid()`200201Возвращает идентификатор пользователя текущего процесса.202203Доступность: Unix.204205#### `os.getenv(key, default=None)`206207Возвращает значение переменной окружения *ключ*, если она существует, или *значение по умолчанию*, если нет. *ключ*, *значение по умолчанию* и результат имеют тип str.208209В Unix ключи и значения декодируются с помощью [`sys.getfilesystemencoding()`](https://python-all.ru/3.2/library/sys.html#sys.getfilesystemencoding) и обработчика ошибок `'surrogateescape'`. Используйте [`os.getenvb()`](https://python-all.ru/3.2/library/os.html#os.getenvb), если требуется другая кодировка.210211Доступность: большинство разновидностей Unix, Windows.212213#### `os.getenvb(key, default=None)`214215Возвращает значение переменной окружения *ключ*, если она существует, или *значение по умолчанию*, если нет. *ключ*, *значение по умолчанию* и результат имеют тип bytes.216217Доступность: большинство разновидностей Unix.218219Новое в версии 3.2.220221#### `os.putenv(key, value)`222223Устанавливает переменную окружения с именем *key* в строковое значение *value*. Такие изменения окружения влияют на подпроцессы, запускаемые с помощью [`os.system()`](https://python-all.ru/3.2/library/os.html#os.system), `popen()` или [`fork()`](https://python-all.ru/3.2/library/os.html#os.fork) и [`execv()`](https://python-all.ru/3.2/library/os.html#os.execv).224225Доступность: большинство разновидностей Unix, Windows.226227> **Примечание**228>229> На некоторых платформах, включая FreeBSD и Mac OS X, изменение `environ` может привести к утечкам памяти. Обратитесь к системной документации по putenv.230231Когда [`putenv()`](https://python-all.ru/3.2/library/os.html#os.putenv) поддерживается, присваивания элементам `os.environ` автоматически преобразуются в соответствующие вызовы [`putenv()`](https://python-all.ru/3.2/library/os.html#os.putenv); однако вызовы [`putenv()`](https://python-all.ru/3.2/library/os.html#os.putenv) не обновляют `os.environ`, так что на самом деле предпочтительнее присваивать значения элементам `os.environ`.232233#### `os.setegid(egid)`234235Устанавливает эффективный идентификатор группы текущего процесса.236237Доступность: Unix.238239#### `os.seteuid(euid)`240241Устанавливает эффективный идентификатор пользователя текущего процесса.242243Доступность: Unix.244245#### `os.setgid(gid)`246247Устанавливает идентификатор группы текущего процесса.248249Доступность: Unix.250251#### `os.setgroups(groups)`252253Устанавливает список дополнительных идентификаторов групп, связанных с текущим процессом, в *groups*. *groups* должен быть последовательностью, и каждый элемент должен быть целым числом, идентифицирующим группу. Эта операция обычно доступна только суперпользователю.254255Доступность: Unix.256257> **Примечание**258>259> На Mac OS X длина *groups* не может превышать заданное системой максимальное количество идентификаторов эффективных групп, обычно 16. Обратитесь к документации по [`getgroups()`](https://python-all.ru/3.2/library/os.html#os.getgroups) в случаях, когда она может не вернуть тот же список групп, который был установлен вызовом setgroups().260261#### `os.setpgrp()`262263Вызывает системный вызов `setpgrp()` или `setpgrp(0, 0)()` в зависимости от того, какая версия реализована (если таковая имеется). Обратитесь к руководству Unix за семантикой.264265Доступность: Unix.266267#### `os.setpgid(pid, pgrp)`268269Вызывает системный вызов `setpgid()`, чтобы установить идентификатор группы процесса с идентификатором *pid* в группу с идентификатором *pgrp*. Обратитесь к руководству Unix за семантикой.270271Доступность: Unix.272273#### `os.setregid(rgid, egid)`274275Устанавливает реальный и эффективный идентификаторы группы текущего процесса.276277Доступность: Unix.278279#### `os.setresgid(rgid, egid, sgid)`280281Устанавливает реальный, эффективный и сохранённый идентификаторы группы текущего процесса.282283Доступность: Unix.284285Новое в версии 3.2.286287#### `os.setresuid(ruid, euid, suid)`288289Устанавливает реальный, эффективный и сохранённый идентификаторы пользователя текущего процесса.290291Доступность: Unix.292293Новое в версии 3.2.294295#### `os.setreuid(ruid, euid)`296297Устанавливает реальный и эффективный идентификаторы пользователя текущего процесса.298299Доступность: Unix.300301#### `os.getsid(pid)`302303Вызывает системный вызов `getsid()`. Обратитесь к руководству Unix за семантикой.304305Доступность: Unix.306307#### `os.setsid()`308309Вызывает системный вызов `setsid()`. Обратитесь к руководству Unix за семантикой.310311Доступность: Unix.312313#### `os.setuid(uid)`314315Устанавливает идентификатор пользователя текущего процесса.316317Доступность: Unix.318319#### `os.strerror(code)`320321Возвращает сообщение об ошибке, соответствующее коду ошибки в *code*. На платформах, где `strerror()` возвращает `NULL` при получении неизвестного номера ошибки, возбуждается [`ValueError`](https://python-all.ru/3.2/library/exceptions.html#ValueError).322323Доступность: Unix, Windows.324325#### `os.supports_bytes_environ`326327True, если родной тип окружения ОС – bytes (например, False в Windows).328329Новое в версии 3.2.330331#### `os.umask(mask)`332333Устанавливает текущую числовую umask и возвращает предыдущую umask.334335Доступность: Unix, Windows.336337#### `os.uname()`338339Возвращает кортеж из 5 элементов, содержащий информацию, идентифицирующую текущую операционную систему. Кортеж содержит 5 строк: `(sysname, nodename, release, version, machine)`. Некоторые системы усекают nodename до 8 символов или до ведущего компонента; лучший способ получить имя хоста – [`socket.gethostname()`](https://python-all.ru/3.2/library/socket.html#socket.gethostname) или даже `socket.gethostbyaddr(socket.gethostname())`.340341Доступность: современные версии Unix.342343#### `os.unsetenv(key)`344345Удаляет переменную окружения с именем *key*. Такие изменения окружения влияют на подпроцессы, запускаемые с помощью [`os.system()`](https://python-all.ru/3.2/library/os.html#os.system), `popen()` или [`fork()`](https://python-all.ru/3.2/library/os.html#os.fork) и [`execv()`](https://python-all.ru/3.2/library/os.html#os.execv).346347Если [`unsetenv()`](https://python-all.ru/3.2/library/os.html#os.unsetenv) поддерживается, удаление элементов из `os.environ` автоматически преобразуется в соответствующий вызов [`unsetenv()`](https://python-all.ru/3.2/library/os.html#os.unsetenv); однако вызовы [`unsetenv()`](https://python-all.ru/3.2/library/os.html#os.unsetenv) не обновляют `os.environ`, поэтому на самом деле предпочтительнее удалять элементы из `os.environ`.348349Доступность: большинство разновидностей Unix, Windows.350351## 15.1.3. Создание файловых объектов352353Эти функции создают новые [*файловые объекты*](https://python-all.ru/3.2/glossary.html#term-file-object). (См. также [`open()`](https://python-all.ru/3.2/library/functions.html#open).)354355#### `os.fdopen(fd, *args, **kwargs)`356357Возвращает открытый файловый объект, связанный с файловым дескриптором *fd*. Это псевдоним [`open()`](https://python-all.ru/3.2/library/functions.html#open) и принимает те же аргументы. Единственное отличие в том, что первый аргумент [`fdopen()`](https://python-all.ru/3.2/library/os.html#os.fdopen) всегда должен быть целым числом.358359## 15.1.4. Операции с файловыми дескрипторами360361Эти функции работают с потоками ввода-вывода, на которые ссылаются файловые дескрипторы.362363Файловые дескрипторы – это небольшие целые числа, соответствующие файлу, который был открыт текущим процессом. Например, стандартный ввод обычно имеет файловый дескриптор 0, стандартный вывод – 1, а стандартный вывод ошибок – 2. Последующие файлы, открываемые процессом, получают номера 3, 4, 5 и так далее. Название «файловый дескриптор» слегка обманчиво; на платформах Unix сокеты и каналы также обозначаются файловыми дескрипторами.364365Метод `fileno()` можно использовать для получения файлового дескриптора, связанного с [*файловым объектом*](https://python-all.ru/3.2/glossary.html#term-file-object), если это необходимо. Обратите внимание, что прямое использование файлового дескриптора обходит методы файлового объекта, игнорируя такие аспекты, как внутренняя буферизация данных.366367#### `os.close(fd)`368369Закрывает файловый дескриптор *fd*.370371Доступность: Unix, Windows.372373> **Примечание**374>375> Эта функция предназначена для низкоуровневого ввода-вывода и должна применяться к файловому дескриптору, возвращаемому [`os.open()`](https://python-all.ru/3.2/library/os.html#os.open) или [`pipe()`](https://python-all.ru/3.2/library/os.html#os.pipe). Чтобы закрыть «файловый объект», возвращаемый встроенной функцией [`open()`](https://python-all.ru/3.2/library/functions.html#open), или `popen()`, или [`fdopen()`](https://python-all.ru/3.2/library/os.html#os.fdopen), используйте его метод `close()`.376377#### `os.closerange(fd_low, fd_high)`378379Закрывает все файловые дескрипторы от *fd\_low* (включительно) до *fd\_high* (исключительно), игнорируя ошибки. Эквивалентно:380381```python382for fd in range(fd_low, fd_high):383 try:384 os.close(fd)385 except OSError:386 pass387```388389Доступность: Unix, Windows.390391#### `os.device_encoding(fd)`392393Возвращает строку, описывающую кодировку устройства, связанного с *fd*, если оно подключено к терминалу; иначе возвращает [`None`](https://python-all.ru/3.2/library/constants.html#None).394395#### `os.dup(fd)`396397Возвращает дубликат файлового дескриптора *fd*.398399Доступность: Unix, Windows.400401#### `os.dup2(fd, fd2)`402403Дублирует файловый дескриптор *fd* в *fd2*, закрывая последний дескриптор сначала, если необходимо.404405Доступность: Unix, Windows.406407#### `os.fchmod(fd, mode)`408409Изменяет режим файла, заданного дескриптором *fd*, на числовой *mode*. См. документацию по [`chmod()`](https://python-all.ru/3.2/library/os.html#os.chmod) для возможных значений *mode*.410411Доступность: Unix.412413#### `os.fchown(fd, uid, gid)`414415Изменяет идентификаторы владельца и группы файла, заданного дескриптором *fd*, на числовые *uid* и *gid*. Чтобы оставить один из идентификаторов без изменений, установите его в -1.416417Доступность: Unix.418419#### `os.fdatasync(fd)`420421Принудительная запись файла с файловым дескриптором *fd* на диск. Не принуждает к обновлению метаданных.422423Доступность: Unix.424425> **Примечание**426>427> Эта функция недоступна в MacOS.428429#### `os.fpathconf(fd, name)`430431Возвращает информацию о конфигурации системы, относящуюся к открытому файлу. *name* определяет извлекаемое значение конфигурации; это может быть строка, являющаяся именем определённого системного значения; эти имена заданы в ряде стандартов (POSIX.1, Unix 95, Unix 98 и других). Некоторые платформы также определяют дополнительные имена. Имена, известные операционной системе хоста, перечислены в словаре `pathconf_names`. Для переменных конфигурации, не включённых в это сопоставление, также допускается передача целого числа для *name*.432433Если *name* – строка и она неизвестна, возбуждается [`ValueError`](https://python-all.ru/3.2/library/exceptions.html#ValueError). Если конкретное значение для *name* не поддерживается хост-системой, даже если оно есть в `pathconf_names`, возбуждается [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError) с кодом ошибки [`errno.EINVAL`](https://python-all.ru/3.2/library/errno.html#errno.EINVAL).434435Доступность: Unix.436437#### `os.fstat(fd)`438439Возвращает статус для файлового дескриптора *fd*, аналогично [`stat()`](https://python-all.ru/3.2/library/os.html#os.stat).440441Доступность: Unix, Windows.442443#### `os.fstatvfs(fd)`444445Возвращает информацию о файловой системе, содержащей файл, связанный с файловым дескриптором *fd*, аналогично [`statvfs()`](https://python-all.ru/3.2/library/os.html#os.statvfs).446447Доступность: Unix.448449#### `os.fsync(fd)`450451Принудительно записывает файл с файловым дескриптором *fd* на диск. В Unix вызывает нативную функцию `fsync()`; в Windows – функцию MS `_commit()`.452453Если вы работаете с буферизованным [*файловым объектом*](https://python-all.ru/3.2/glossary.html#term-file-object) Python *f*, сначала вызовите `f.flush()`, а затем `os.fsync(f.fileno())`, чтобы все внутренние буферы, связанные с *f*, были записаны на диск.454455Доступность: Unix и Windows.456457#### `os.ftruncate(fd, length)`458459Усекает файл, соответствующий файловому дескриптору *fd*, так, чтобы его размер составлял не более *length* байт.460461Доступность: Unix.462463#### `os.isatty(fd)`464465Возвращает `True`, если файловый дескриптор *fd* открыт и связан с tty-подобным устройством, иначе `False`.466467Доступность: Unix.468469#### `os.lseek(fd, pos, how)`470471Устанавливает текущую позицию файлового дескриптора *fd* в позицию *pos*, изменённую согласно *how*: [`SEEK_SET`](https://python-all.ru/3.2/library/os.html#os.SEEK_SET) или `0` устанавливает позицию относительно начала файла; [`SEEK_CUR`](https://python-all.ru/3.2/library/os.html#os.SEEK_CUR) или `1` устанавливает её относительно текущей позиции; [`os.SEEK_END`](https://python-all.ru/3.2/library/os.html#os.SEEK_END) или `2` устанавливает её относительно конца файла. Возвращает новую позицию курсора в байтах, начиная с начала.472473Доступность: Unix, Windows.474475#### `os.SEEK_SET`476477#### `os.SEEK_CUR`478479#### `os.SEEK_END`480481Параметры функции [`lseek()`](https://python-all.ru/3.2/library/os.html#os.lseek). Их значения: 0, 1 и 2 соответственно. Доступность: Windows, Unix.482483#### `os.open(file, flags[, mode])`484485Открывает файл *file* и устанавливает различные флаги в соответствии с *flags* и, возможно, его режим в соответствии с *mode*. Значение *mode* по умолчанию равно `0o777` (восьмеричное), и текущее значение umask сначала вычитается. Возвращает файловый дескриптор для только что открытого файла.486487Описание значений флагов и режимов смотрите в документации времени выполнения C; константы флагов (например, [`O_RDONLY`](https://python-all.ru/3.2/library/os.html#os.O_RDONLY) и [`O_WRONLY`](https://python-all.ru/3.2/library/os.html#os.O_WRONLY)) также определены в этом модуле (см. [*Константы флагов open()*](https://python-all.ru/3.2/library/os.html#open-constants)). В частности, в Windows для открытия файлов в двоичном режиме необходимо добавить [`O_BINARY`](https://python-all.ru/3.2/library/os.html#os.O_BINARY).488489Доступность: Unix, Windows.490491> **Примечание**492>493> Эта функция предназначена для низкоуровневого ввода-вывода. Для обычного использования применяйте встроенную функцию [`open()`](https://python-all.ru/3.2/library/functions.html#open), которая возвращает [*файловый объект*](https://python-all.ru/3.2/glossary.html#term-file-object) с методами `read()` и `write()` (и многими другими). Чтобы обернуть файловый дескриптор в файловый объект, используйте [`fdopen()`](https://python-all.ru/3.2/library/os.html#os.fdopen).494495#### `os.openpty()`496497Открывает новую пару псевдотерминалов. Возвращает пару файловых дескрипторов `(master, slave)` для pty и tty соответственно. Для (чуть) более переносимого подхода используйте модуль [`pty`](https://python-all.ru/3.2/library/pty.html#module-pty).498499Доступность: некоторые разновидности Unix.500501#### `os.pipe()`502503Создаёт канал (pipe). Возвращает пару файловых дескрипторов `(r, w)`, пригодных для чтения и записи соответственно.504505Доступность: Unix, Windows.506507#### `os.read(fd, n)`508509Читает не более *n* байт из файлового дескриптора *fd*. Возвращает объект bytes, содержащий прочитанные байты. Если достигнут конец файла, на который ссылается *fd*, возвращается пустой объект bytes.510511Доступность: Unix, Windows.512513> **Примечание**514>515> Эта функция предназначена для низкоуровневого ввода-вывода и должна применяться к файловому дескриптору, возвращённому [`os.open()`](https://python-all.ru/3.2/library/os.html#os.open) или [`pipe()`](https://python-all.ru/3.2/library/os.html#os.pipe). Для чтения «файлового объекта», возвращённого встроенной функцией [`open()`](https://python-all.ru/3.2/library/functions.html#open), или `popen()`, или [`fdopen()`](https://python-all.ru/3.2/library/os.html#os.fdopen), или [`sys.stdin`](https://python-all.ru/3.2/library/sys.html#sys.stdin), используйте его методы `read()` или `readline()`.516517#### `os.tcgetpgrp(fd)`518519Возвращает группу процессов, связанную с терминалом, заданным *fd* (открытый файловый дескриптор, возвращаемый [`os.open()`](https://python-all.ru/3.2/library/os.html#os.open)).520521Доступность: Unix.522523#### `os.tcsetpgrp(fd, pg)`524525Устанавливает группу процессов, связанную с терминалом, задаваемым *fd* (открытым файловым дескриптором, возвращаемым [`os.open()`](https://python-all.ru/3.2/library/os.html#os.open)), равной *pg*.526527Доступность: Unix.528529#### `os.ttyname(fd)`530531Возвращает строку, которая идентифицирует терминальное устройство, связанное с файловым дескриптором *fd*. Если *fd* не связан с терминальным устройством, возбуждается исключение.532533Доступность: Unix.534535#### `os.write(fd, str)`536537Записывает объект bytes из *str* в файловый дескриптор *fd*. Возвращает количество фактически записанных байт.538539Доступность: Unix, Windows.540541> **Примечание**542>543> Эта функция предназначена для низкоуровневого ввода-вывода и должна применяться к файловому дескриптору, возвращённому [`os.open()`](https://python-all.ru/3.2/library/os.html#os.open) или [`pipe()`](https://python-all.ru/3.2/library/os.html#os.pipe). Для записи в «файловый объект», возвращаемый встроенной функцией [`open()`](https://python-all.ru/3.2/library/functions.html#open), или `popen()`, или [`fdopen()`](https://python-all.ru/3.2/library/os.html#os.fdopen), или [`sys.stdout`](https://python-all.ru/3.2/library/sys.html#sys.stdout), или [`sys.stderr`](https://python-all.ru/3.2/library/sys.html#sys.stderr), используйте его метод `write()`.544545### 15.1.4.1. `open()` константы флагов546547Следующие константы являются опциями для параметра *flags* функции [`open()`](https://python-all.ru/3.2/library/os.html#os.open). Их можно комбинировать с помощью побитового оператора ИЛИ (`|`). Некоторые из них доступны не на всех платформах. Описания доступности и использования см. в справочной странице *open(2)* в Unix или в [MSDN](https://python-all.ru/3.2/library/os.html) в Windows.548549#### `os.O_RDONLY`550551#### `os.O_WRONLY`552553#### `os.O_RDWR`554555#### `os.O_APPEND`556557#### `os.O_CREAT`558559#### `os.O_EXCL`560561#### `os.O_TRUNC`562563Эти константы доступны в Unix и Windows.564565#### `os.O_DSYNC`566567#### `os.O_RSYNC`568569#### `os.O_SYNC`570571#### `os.O_NDELAY`572573#### `os.O_NONBLOCK`574575#### `os.O_NOCTTY`576577#### `os.O_SHLOCK`578579#### `os.O_EXLOCK`580581Эти константы доступны только в Unix.582583#### `os.O_BINARY`584585#### `os.O_NOINHERIT`586587#### `os.O_SHORT_LIVED`588589#### `os.O_TEMPORARY`590591#### `os.O_RANDOM`592593#### `os.O_SEQUENTIAL`594595#### `os.O_TEXT`596597Эти константы доступны только в Windows.598599#### `os.O_ASYNC`600601#### `os.O_DIRECT`602603#### `os.O_DIRECTORY`604605#### `os.O_NOFOLLOW`606607#### `os.O_NOATIME`608609Эти константы – расширения GNU и отсутствуют, если не определены библиотекой C.610611## 15.1.5. Файлы и каталоги612613#### `os.access(path, mode)`614615Использует реальные UID/GID для проверки доступа к *path*. Обратите внимание, что большинство операций использует эффективные UID/GID, поэтому данная процедура может использоваться в среде suid/sgid для проверки, имеет ли вызвавший пользователь указанный доступ к *path*. *mode* должен быть [`F_OK`](https://python-all.ru/3.2/library/os.html#os.F_OK) для проверки существования *path*, или это может быть логическое ИЛИ одного или нескольких из [`R_OK`](https://python-all.ru/3.2/library/os.html#os.R_OK), [`W_OK`](https://python-all.ru/3.2/library/os.html#os.W_OK) и [`X_OK`](https://python-all.ru/3.2/library/os.html#os.X_OK) для проверки прав. Возвращает [`True`](https://python-all.ru/3.2/library/constants.html#True), если доступ разрешён, [`False`](https://python-all.ru/3.2/library/constants.html#False) в противном случае. См. man-страницу Unix *access(2)* для получения дополнительной информации.616617Доступность: Unix, Windows.618619> **Примечание**620>621> Using [`access()`](https://python-all.ru/3.2/library/os.html#os.access) to check if a user is authorized to e.g. open a file before actually doing so using [`open()`](https://python-all.ru/3.2/library/functions.html#open) creates a security hole, because the user might exploit the short time interval between checking and opening the file to manipulate it. It’s preferable to use [*EAFP*](https://python-all.ru/3.2/glossary.html#term-eafp) techniques. For example:622>623> ```python624> if os.access("myfile", os.R_OK):625> with open("myfile") as fp:626> return fp.read()627> return "some default data"628> ```629>630> лучше написать так:631>632> ```python633> try:634> fp = open("myfile")635> except IOError as e:636> if e.errno == errno.EACCES:637> return "some default data"638> # Не ошибка прав доступа.639> raise640> else:641> with fp:642> return fp.read()643> ```644645> **Примечание**646>647> Операции ввода-вывода могут завершаться ошибкой, даже если [`access()`](https://python-all.ru/3.2/library/os.html#os.access) показывает, что они должны выполниться успешно, особенно для операций с сетевыми файловыми системами, семантика разрешений которых может выходить за рамки обычной POSIX-модели битов разрешений.648649#### `os.F_OK`650651Значение, которое передаётся в параметр *mode* функции [`access()`](https://python-all.ru/3.2/library/os.html#os.access) для проверки существования *path*.652653#### `os.R_OK`654655Значение, которое включается в параметр *mode* функции [`access()`](https://python-all.ru/3.2/library/os.html#os.access) для проверки доступности чтения *path*.656657#### `os.W_OK`658659Значение, которое включается в параметр *mode* функции [`access()`](https://python-all.ru/3.2/library/os.html#os.access) для проверки возможности записи *path*.660661#### `os.X_OK`662663Значение, которое включается в параметр *mode* функции [`access()`](https://python-all.ru/3.2/library/os.html#os.access) для определения, является ли *path* исполняемым.664665#### `os.chdir(path)`666667Изменяет текущий рабочий каталог на *path*.668669Доступность: Unix, Windows.670671#### `os.fchdir(fd)`672673Изменяет текущую рабочую директорию на директорию, представленную файловым дескриптором *fd*. Дескриптор должен ссылаться на открытую директорию, а не на открытый файл.674675Доступность: Unix.676677#### `os.getcwd()`678679Возвращает строку, представляющую текущую рабочую директорию.680681Доступность: Unix, Windows.682683#### `os.getcwdb()`684685Возвращает байтовую строку, представляющую текущую рабочую директорию.686687Доступность: Unix, Windows.688689#### `os.chflags(path, flags)`690691Устанавливает флаги *path* в числовое *flags*. *flags* может принимать комбинацию (побитовое ИЛИ) следующих значений (как определено в модуле [`stat`](https://python-all.ru/3.2/library/stat.html#module-stat)):692693- [`stat.UF_NODUMP`](https://python-all.ru/3.2/library/stat.html#stat.UF_NODUMP)694- [`stat.UF_IMMUTABLE`](https://python-all.ru/3.2/library/stat.html#stat.UF_IMMUTABLE)695- [`stat.UF_APPEND`](https://python-all.ru/3.2/library/stat.html#stat.UF_APPEND)696- [`stat.UF_OPAQUE`](https://python-all.ru/3.2/library/stat.html#stat.UF_OPAQUE)697- [`stat.UF_NOUNLINK`](https://python-all.ru/3.2/library/stat.html#stat.UF_NOUNLINK)698- [`stat.UF_COMPRESSED`](https://python-all.ru/3.2/library/stat.html#stat.UF_COMPRESSED)699- [`stat.UF_HIDDEN`](https://python-all.ru/3.2/library/stat.html#stat.UF_HIDDEN)700- [`stat.SF_ARCHIVED`](https://python-all.ru/3.2/library/stat.html#stat.SF_ARCHIVED)701- [`stat.SF_IMMUTABLE`](https://python-all.ru/3.2/library/stat.html#stat.SF_IMMUTABLE)702- [`stat.SF_APPEND`](https://python-all.ru/3.2/library/stat.html#stat.SF_APPEND)703- [`stat.SF_NOUNLINK`](https://python-all.ru/3.2/library/stat.html#stat.SF_NOUNLINK)704- [`stat.SF_SNAPSHOT`](https://python-all.ru/3.2/library/stat.html#stat.SF_SNAPSHOT)705706Доступность: Unix.707708#### `os.chroot(path)`709710Изменяет корневую директорию текущего процесса на *path*. Доступность: Unix.711712#### `os.chmod(path, mode)`713714Изменяет режим *path* на числовой *mode*. *mode* может принимать одно из следующих значений (как определено в модуле [`stat`](https://python-all.ru/3.2/library/stat.html#module-stat)) или их побитовые OR-комбинации:715716- [`stat.S_ISUID`](https://python-all.ru/3.2/library/stat.html#stat.S_ISUID)717- [`stat.S_ISGID`](https://python-all.ru/3.2/library/stat.html#stat.S_ISGID)718- [`stat.S_ENFMT`](https://python-all.ru/3.2/library/stat.html#stat.S_ENFMT)719- [`stat.S_ISVTX`](https://python-all.ru/3.2/library/stat.html#stat.S_ISVTX)720- [`stat.S_IREAD`](https://python-all.ru/3.2/library/stat.html#stat.S_IREAD)721- [`stat.S_IWRITE`](https://python-all.ru/3.2/library/stat.html#stat.S_IWRITE)722- [`stat.S_IEXEC`](https://python-all.ru/3.2/library/stat.html#stat.S_IEXEC)723- [`stat.S_IRWXU`](https://python-all.ru/3.2/library/stat.html#stat.S_IRWXU)724- [`stat.S_IRUSR`](https://python-all.ru/3.2/library/stat.html#stat.S_IRUSR)725- [`stat.S_IWUSR`](https://python-all.ru/3.2/library/stat.html#stat.S_IWUSR)726- [`stat.S_IXUSR`](https://python-all.ru/3.2/library/stat.html#stat.S_IXUSR)727- [`stat.S_IRWXG`](https://python-all.ru/3.2/library/stat.html#stat.S_IRWXG)728- [`stat.S_IRGRP`](https://python-all.ru/3.2/library/stat.html#stat.S_IRGRP)729- [`stat.S_IWGRP`](https://python-all.ru/3.2/library/stat.html#stat.S_IWGRP)730- [`stat.S_IXGRP`](https://python-all.ru/3.2/library/stat.html#stat.S_IXGRP)731- [`stat.S_IRWXO`](https://python-all.ru/3.2/library/stat.html#stat.S_IRWXO)732- [`stat.S_IROTH`](https://python-all.ru/3.2/library/stat.html#stat.S_IROTH)733- [`stat.S_IWOTH`](https://python-all.ru/3.2/library/stat.html#stat.S_IWOTH)734- [`stat.S_IXOTH`](https://python-all.ru/3.2/library/stat.html#stat.S_IXOTH)735736Доступность: Unix, Windows.737738> **Примечание**739>740> Хотя Windows поддерживает [`chmod()`](https://python-all.ru/3.2/library/os.html#os.chmod), с её помощью можно установить только флаг «только для чтения» (с помощью констант `stat.S_IWRITE` и `stat.S_IREAD` или соответствующего целочисленного значения). Все остальные биты игнорируются.741742#### `os.chown(path, uid, gid)`743744Изменяет владельца и группу *path* на числовые *uid* и *gid*. Чтобы оставить один из идентификаторов без изменений, задайте для него значение -1.745746Доступность: Unix.747748#### `os.lchflags(path, flags)`749750Устанавливает флаги *path* в числовое значение *flags*, как [`chflags()`](https://python-all.ru/3.2/library/os.html#os.chflags), но не переходит по символическим ссылкам.751752Доступность: Unix.753754#### `os.lchmod(path, mode)`755756Изменяет mode *path* на числовое значение *mode*. Если path является символической ссылкой, изменение затрагивает саму ссылку, а не целевой файл. Возможные значения *mode* описаны в документации [`chmod()`](https://python-all.ru/3.2/library/os.html#os.chmod).757758Доступность: Unix.759760#### `os.lchown(path, uid, gid)`761762Изменяет владельца и группу *path* на числовые *uid* и *gid*. Эта функция не переходит по символическим ссылкам.763764Доступность: Unix.765766#### `os.link(source, link_name)`767768Создаёт жёсткую ссылку, указывающую на *source*, с именем *link\_name*.769770Доступность: Unix, Windows.771772Изменено в версии 3.2: Добавлена поддержка Windows.773774#### `os.listdir(path='.')`775776Возвращает список, содержащий имена записей в каталоге, заданном *path* (по умолчанию `'.'`). Список возвращается в произвольном порядке. Он не включает специальные записи `'.'` и `'..'`, даже если они присутствуют в каталоге.777778Эту функцию можно вызывать с аргументом типа bytes или str; она возвращает имена файлов того же типа данных.779780Доступность: Unix, Windows.781782Изменено в версии 3.2: Параметр *path* стал необязательным.783784#### `os.lstat(path)`785786Выполняет системный вызов `lstat()` для указанного пути. Аналогична [`stat()`](https://python-all.ru/3.2/library/os.html#os.stat), но не следует символическим ссылкам. На платформах, не поддерживающих символические ссылки, является псевдонимом для [`stat()`](https://python-all.ru/3.2/library/os.html#os.stat).787788Изменено в версии 3.2: Добавлена поддержка символических ссылок Windows 6.0 (Vista).789790#### `os.mkfifo(path[, mode])`791792Создаёт FIFO (именованный канал) с именем *path* и числовым режимом *mode*. По умолчанию *mode* равен `0o666` (восьмеричное). Из режима сначала вычитается tекущее значение umask.793794FIFO – это каналы, к которым можно обращаться как к обычным файлам. FIFO существуют, пока они не будут удалены (например, с помощью [`os.unlink()`](https://python-all.ru/3.2/library/os.html#os.unlink)). Обычно FIFO используются как точка встречи между процессами типа «клиент» и «сервер»: сервер открывает FIFO на чтение, а клиент – на запись. Обратите внимание, что [`mkfifo()`](https://python-all.ru/3.2/library/os.html#os.mkfifo) не открывает FIFO – она только создаёт точку встречи.795796Доступность: Unix.797798#### `os.mknod(filename[, mode=0o600[, device=0]])`799800Create a filesystem node (file, device special file or named pipe) named *filename*. *mode* specifies both the permissions to use and the type of node to be created, being combined (bitwise OR) with one of `stat.S_IFREG`, `stat.S_IFCHR`, `stat.S_IFBLK`, and `stat.S_IFIFO` (those constants are available in [`stat`](https://python-all.ru/3.2/library/stat.html#module-stat)). For `stat.S_IFCHR` and `stat.S_IFBLK`, *device* defines the newly created device special file (probably using [`os.makedev()`](https://python-all.ru/3.2/library/os.html#os.makedev)), otherwise it is ignored.801802#### `os.major(device)`803804Извлекает старший номер устройства из сырого номера устройства (обычно из поля `st_dev` или `st_rdev` из `stat`).805806#### `os.minor(device)`807808Извлекает младший номер устройства из сырого номера устройства (обычно из поля `st_dev` или `st_rdev` из `stat`).809810#### `os.makedev(major, minor)`811812Составляет сырой номер устройства из старшего и младшего номеров устройства.813814#### `os.mkdir(path[, mode])`815816Создаёт каталог с именем *path* и числовым режимом *mode*. По умолчанию *mode* равен `0o777` (восьмеричное). В некоторых системах *mode* игнорируется. Там, где он используется, сначала вычитается текущее значение umask. Если каталог уже существует, возбуждается исключение [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError).817818Также можно создавать временные каталоги; см. функцию [`tempfile.mkdtemp()`](https://python-all.ru/3.2/library/tempfile.html#tempfile.mkdtemp) модуля [`tempfile`](https://python-all.ru/3.2/library/tempfile.html#module-tempfile).819820Доступность: Unix, Windows.821822#### `os.makedirs(path, mode=0o777, exist_ok=False)`823824Функция рекурсивного создания каталогов. Работает как [`mkdir()`](https://python-all.ru/3.2/library/os.html#os.mkdir), но создаёт все промежуточные каталоги, необходимые для содержания конечного каталога.825826По умолчанию *mode* равен `0o777` (восьмеричное). На некоторых системах *mode* игнорируется. Там, где он используется, сначала вычитается текущее значение umask.827828Если *exist\_ok* равен `False` (по умолчанию), возбуждается [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError), если целевой каталог уже существует.829830> **Примечание**831>832> [`makedirs()`](https://python-all.ru/3.2/library/os.html#os.makedirs) может запутаться, если создаваемые компоненты пути содержат [`pardir`](https://python-all.ru/3.2/library/os.html#os.pardir) (например, ".." в системах UNIX).833834Эта функция корректно обрабатывает UNC-пути.835836Новое в версии 3.2: Параметр *exist\_ok*.837838Изменено в версии 3.2.6.839840#### `os.pathconf(path, name)`841842Возвращает информацию о системной конфигурации для указанного файла. *name* задаёт значение конфигурации, которое нужно получить; это может быть строка, являющаяся именем определённого системного значения; эти имена заданы в ряде стандартов (POSIX.1, Unix 95, Unix 98 и других). Некоторые платформы определяют и дополнительные имена. Имена, известные операционной системе, перечислены в словаре `pathconf_names`. Для переменных конфигурации, не включённых в этот словарь, также можно передать целое число в *name*.843844Если *name* – строка и она неизвестна, возбуждается [`ValueError`](https://python-all.ru/3.2/library/exceptions.html#ValueError). Если конкретное значение для *name* не поддерживается хост-системой, даже если оно есть в `pathconf_names`, возбуждается [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError) с кодом ошибки [`errno.EINVAL`](https://python-all.ru/3.2/library/errno.html#errno.EINVAL).845846Доступность: Unix.847848#### `os.pathconf_names`849850Словарь, сопоставляющий имена, принимаемые [`pathconf()`](https://python-all.ru/3.2/library/os.html#os.pathconf) и [`fpathconf()`](https://python-all.ru/3.2/library/os.html#os.fpathconf), целочисленным значениям, определённым для этих имён операционной системой хоста. Может использоваться для определения набора имён, известных системе. Доступность: Unix.851852#### `os.readlink(path)`853854Возвращает строку, представляющую путь, на который указывает символическая ссылка. Результатом может быть как абсолютный, так и относительный путь; если он относительный, его можно преобразовать в абсолютный с помощью `os.path.join(os.path.dirname(path), result)`.855856Если *path* является строковым объектом, результат тоже будет строковым объектом, и вызов может возбудить UnicodeDecodeError. Если *path* является объектом bytes, результат будет объектом bytes.857858Доступность: Unix, Windows859860Изменено в версии 3.2: Добавлена поддержка символических ссылок Windows 6.0 (Vista).861862#### `os.remove(path)`863864Удаляет файл *path*. Если *path* является каталогом, возбуждается исключение [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError); для удаления каталога используйте [`rmdir()`](https://python-all.ru/3.2/library/os.html#os.rmdir) (см. ниже). Эта функция идентична [`unlink()`](https://python-all.ru/3.2/library/os.html#os.unlink), описанной ниже. В Windows попытка удалить файл, который используется, вызывает исключение; в Unix запись каталога удаляется, но память, выделенная файлу, не освобождается, пока исходный файл не перестанет использоваться.865866Доступность: Unix, Windows.867868#### `os.removedirs(path)`869870Удаляет каталоги рекурсивно. Работает как [`rmdir()`](https://python-all.ru/3.2/library/os.html#os.rmdir), за исключением того, что после успешного удаления конечного каталога [`removedirs()`](https://python-all.ru/3.2/library/os.html#os.removedirs) пытается последовательно удалить все родительские каталоги, указанные в *path*, пока не возникнет ошибка (которая игнорируется, поскольку обычно означает, что родительский каталог не пуст). Например, `os.removedirs('foo/bar/baz')` сначала удалит каталог `'foo/bar/baz'`, а затем удалит `'foo/bar'` и `'foo'`, если они пусты. Возбуждается [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError), если конечный каталог не удалось удалить.871872#### `os.rename(src, dst)`873874Переименовывает файл или каталог *src* в *dst*. Если *dst* является каталогом, возбуждается исключение [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError). В Unix, если *dst* существует и является файлом, он будет молча заменён, если у пользователя есть разрешение. Операция может завершиться ошибкой в некоторых версиях Unix, если *src* и *dst* находятся на разных файловых системах. В случае успеха переименование будет атомарной операцией (это требование POSIX). В Windows, если *dst* уже существует, возбуждается исключение [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError), даже если это файл; атомарное переименование, когда *dst* указывает на существующий файл, может быть невозможно.875876Доступность: Unix, Windows.877878#### `os.renames(old, new)`879880Рекурсивная функция переименования каталогов или файлов. Работает как [`rename()`](https://python-all.ru/3.2/library/os.html#os.rename), но сначала пытается создать все промежуточные каталоги, необходимые для правильного нового пути. После переименования каталоги, соответствующие самым правым сегментам пути старого имени, удаляются с помощью [`removedirs()`](https://python-all.ru/3.2/library/os.html#os.removedirs).881882> **Примечание**883>884> Эта функция может завершиться неудачей, если новая структура каталогов уже создана, но недостаточно прав для удаления конечного каталога или файла.885886#### `os.rmdir(path)`887888Удаляет каталог *path*. Работает только если каталог пуст, иначе возникает исключение [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError). Для удаления целых деревьев каталогов можно использовать [`shutil.rmtree()`](https://python-all.ru/3.2/library/shutil.html#shutil.rmtree).889890Доступность: Unix, Windows.891892#### `os.stat(path)`893894Выполняет системный вызов `stat()` для указанного пути. (Эта функция следует символическим ссылкам; для получения информации о самой символической ссылке используйте [`lstat()`](https://python-all.ru/3.2/library/os.html#os.lstat).)895896Возвращаемое значение – объект, чьи атрибуты соответствуют членам структуры `stat`, а именно:897898- `st_mode` – биты защиты,899- `st_ino` – номер индексного дескриптора,900- `st_dev` – устройство,901- `st_nlink` – количество жёстких ссылок,902- `st_uid` – идентификатор пользователя-владельца,903- `st_gid` – идентификатор группы-владельца,904- `st_size` – размер файла в байтах,905- `st_atime` – время последнего доступа,906- `st_mtime` – время самого последнего изменения содержимого,907- `st_ctime` – зависит от платформы; время самого последнего изменения метаданных в Unix или время создания в Windows)908909В некоторых системах Unix (например, Linux) могут быть также доступны следующие атрибуты:910911- `st_blocks` – количество блоков, выделенных для файла912- `st_blksize` – размер блока файловой системы913- `st_rdev` – тип устройства, если индексный дескриптор относится к устройству914- `st_flags` – пользовательские флаги для файла915916В других системах Unix (например, FreeBSD) могут быть доступны следующие атрибуты (но могут заполняться, только если root попытается их использовать):917918- `st_gen` – номер поколения файла919- `st_birthtime` – время создания файла920921В системах Mac OS также могут быть доступны следующие атрибуты:922923- `st_rsize`924- `st_creator`925- `st_type`926927> **Примечание**928>929> Точный смысл и разрешающая способность атрибутов `st_atime`, `st_mtime` и `st_ctime` зависят от операционной системы и файловой системы. Например, в системах Windows, использующих файловые системы FAT или FAT32, `st_mtime` имеет разрешение 2 секунды, а `st_atime` – всего 1 день. Подробнее см. в документации вашей операционной системы.930931Для обратной совместимости возвращаемое значение [`stat()`](https://python-all.ru/3.2/library/os.html#os.stat) также доступно в виде кортежа из как минимум 10 целых чисел, представляющих наиболее важные (и переносимые) поля структуры `stat` в следующем порядке: `st_mode`, `st_ino`, `st_dev`, `st_nlink`, `st_uid`, `st_gid`, `st_size`, `st_atime`, `st_mtime`, `st_ctime`. Некоторые реализации могут добавлять в конец дополнительные элементы.932933Стандартный модуль [`stat`](https://python-all.ru/3.2/library/stat.html#module-stat) определяет функции и константы, полезные для извлечения информации из структуры `stat`. (В Windows некоторые поля заполняются фиктивными значениями.)934935Пример:936937```python938>>> import os939>>> statinfo = os.stat('somefile.txt')940>>> statinfo941posix.stat_result(st_mode=33188, st_ino=7876932, st_dev=234881026,942st_nlink=1, st_uid=501, st_gid=501, st_size=264, st_atime=1297230295,943st_mtime=1297230027, st_ctime=1297230027)944>>> statinfo.st_size945264946```947948Доступность: Unix, Windows.949950#### `os.stat_float_times([newvalue])`951952Определяет, представляет ли `stat_result` временные метки в виде чисел с плавающей запятой. Если *newvalue* равен `True`, последующие вызовы [`stat()`](https://python-all.ru/3.2/library/os.html#os.stat) возвращают числа с плавающей запятой; если `False` – целые числа. Если *newvalue* опущен, возвращается текущая настройка.953954Для совместимости со старыми версиями Python доступ к `stat_result` в виде кортежа всегда возвращает целые числа.955956Python теперь по умолчанию возвращает значения float. Приложения, которые некорректно работают с вещественными временными метками, могут использовать эту функцию для восстановления старого поведения.957958Разрешение временных меток (то есть наименьшая возможная дробная часть) зависит от системы. Некоторые системы поддерживают только секундное разрешение; на таких системах дробная часть всегда будет равна нулю.959960Рекомендуется изменять этот параметр только во время запуска программы в модуле *\_\_main\_\_*; библиотеки никогда не должны изменять этот параметр. Если приложение использует библиотеку, которая некорректно работает при обработке вещественных временных меток, этому приложению следует отключить эту возможность до тех пор, пока библиотека не будет исправлена.961962#### `os.statvfs(path)`963964Выполняет системный вызов `statvfs()` для заданного пути. Возвращаемое значение – объект, атрибуты которого описывают файловую систему по указанному пути и соответствуют членам структуры `statvfs`, а именно: `f_bsize`, `f_frsize`, `f_blocks`, `f_bfree`, `f_bavail`, `f_files`, `f_ffree`, `f_favail`, `f_flag`, `f_namemax`.965966Для битовых флагов атрибута `f_flag` определены две константы уровня модуля: если установлен флаг `ST_RDONLY`, файловая система смонтирована только для чтения, а если установлен `ST_NOSUID`, семантика битов setuid/setgid отключена или не поддерживается.967968Изменено в версии 3.2: Были добавлены константы `ST_RDONLY` и `ST_NOSUID`.969970Доступность: Unix.971972#### `os.symlink(source, link_name)`973974#### `os.symlink(source, link_name, target_is_directory=False)`975976Создаёт символическую ссылку, указывающую на *source*, с именем *link\_name*.977978On Windows, symlink version takes an additional optional parameter, *target\_is\_directory*, which defaults to `False`.979980В Windows символическая ссылка представляет файл или каталог и не меняется динамически в зависимости от цели. Если *target\_is\_directory* установлен в `True`, символическая ссылка будет создана как ссылка на каталог, в противном случае – как ссылка на файл (по умолчанию).981982Поддержка символических ссылок была введена в Windows 6.0 (Vista). [`symlink()`](https://python-all.ru/3.2/library/os.html#os.symlink) вызовет [`NotImplementedError`](https://python-all.ru/3.2/library/exceptions.html#NotImplementedError) в версиях Windows старше 6.0.983984> **Примечание**985>986> Для успешного создания символических ссылок требуется привилегия *SeCreateSymbolicLinkPrivilege*. Эта привилегия обычно не предоставляется обычным пользователям, но доступна учётным записям, которые могут повысить привилегии до уровня администратора. Получение этой привилегии или запуск приложения от имени администратора – способы успешно создавать символические ссылки.987>988> [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError) возникает, когда функция вызывается непривилегированным пользователем.989990Доступность: Unix, Windows.991992Изменено в версии 3.2: Добавлена поддержка символических ссылок Windows 6.0 (Vista).993994#### `os.unlink(path)`995996Удаляет файл *path*. Эта функция совпадает с [`remove()`](https://python-all.ru/3.2/library/os.html#os.remove); имя [`unlink()`](https://python-all.ru/3.2/library/os.html#os.unlink) является её традиционным Unix-именем.997998Доступность: Unix, Windows.9991000#### `os.utime(path, times)`10011002Устанавливает время доступа и время изменения файла, указанного в *path*. Если *times* равно `None`, то время доступа и изменения файла устанавливаются в текущее время. (Эффект аналогичен запуску Unix-программы **touch** для данного пути.) В противном случае *times* должен быть кортежем из двух чисел вида `(atime, mtime)`, который используется для установки времени доступа и изменения соответственно. Можно ли передать каталог в качестве *path*, зависит от того, реализует ли операционная система каталоги как файлы (например, в Windows – нет). Обратите внимание, что установленные здесь точные времена могут не вернуться при последующем вызове [`stat()`](https://python-all.ru/3.2/library/os.html#os.stat) из-за разрешающей способности, с которой ваша операционная система записывает время доступа и изменения; см. [`stat()`](https://python-all.ru/3.2/library/os.html#os.stat).10031004Доступность: Unix, Windows.10051006#### `os.walk(top, topdown=True, onerror=None, followlinks=False)`10071008Генерирует имена файлов в дереве каталогов, обходя дерево сверху вниз или снизу вверх. Для каждого каталога в дереве с корнем в каталоге *top* (включая сам *top*) он возвращает кортеж из трёх элементов `(dirpath, dirnames, filenames)`.10091010*dirpath* – строка, путь к каталогу. *dirnames* – список имён подкаталогов в *dirpath* (за исключением `'.'` и `'..'`). *filenames* – список имён файлов, не являющихся каталогами, в *dirpath*. Обратите внимание, что имена в списках не содержат компонентов пути. Чтобы получить полный путь (начинающийся с *top*) к файлу или каталогу в *dirpath*, выполните `os.path.join(dirpath, name)`.10111012Если необязательный аргумент *topdown* равен `True` или не указан, тройка для каталога генерируется до троек для любых его подкаталогов (каталоги обходятся сверху вниз). Если *topdown* равен `False`, тройка для каталога генерируется после троек для всех его подкаталогов (каталоги обходятся снизу вверх).10131014Когда *topdown* равен `True`, вызывающий код может изменить список *dirnames* на месте (например, с помощью [`del`](https://python-all.ru/3.2/reference/simple_stmts.html#del) или срезного присваивания), и [`walk()`](https://python-all.ru/3.2/library/os.html#os.walk) будет рекурсивно обходить только те подкаталоги, чьи имена остались в *dirnames*; это можно использовать для сокращения поиска, задания определённого порядка обхода или даже для информирования [`walk()`](https://python-all.ru/3.2/library/os.html#os.walk) о каталогах, которые вызывающий код создаёт или переименовывает до того, как [`walk()`](https://python-all.ru/3.2/library/os.html#os.walk) возобновит работу. Изменение *dirnames*, когда *topdown* равен `False`, неэффективно, потому что в режиме обхода снизу вверх каталоги в *dirnames* генерируются до того, как генерируется сам *dirpath*.10151016По умолчанию ошибки от вызова [`listdir()`](https://python-all.ru/3.2/library/os.html#os.listdir) игнорируются. Если указан необязательный аргумент *onerror*, он должен быть функцией; она будет вызвана с одним аргументом, экземпляром [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError). Она может сообщить об ошибке, чтобы продолжить обход, или возбудить исключение, чтобы прервать обход. Обратите внимание, что имя файла доступно как атрибут `filename` объекта исключения.10171018По умолчанию [`walk()`](https://python-all.ru/3.2/library/os.html#os.walk) не будет спускаться по символическим ссылкам, ведущим к каталогам. Установите *followlinks* в `True`, чтобы посещать каталоги, на которые указывают символические ссылки, в системах, поддерживающих их.10191020> **Примечание**1021>1022> Имейте в виду, что установка *followlinks* в значение `True` может привести к бесконечной рекурсии, если ссылка указывает на родительский каталог самой себя. [`walk()`](https://python-all.ru/3.2/library/os.html#os.walk) не отслеживает уже посещённые каталоги.10231024> **Примечание**1025>1026> Если вы передаёте относительное имя пути, не меняйте текущий рабочий каталог между возобновлениями [`walk()`](https://python-all.ru/3.2/library/os.html#os.walk). [`walk()`](https://python-all.ru/3.2/library/os.html#os.walk) никогда не меняет текущий каталог и предполагает, что вызывающий код тоже его не меняет.10271028В этом примере показано количество байтов, занимаемых файлами (не каталогами) в каждом каталоге внутри начального каталога, при этом он не заглядывает ни в один подкаталог CVS:10291030```python1031import os1032from os.path import join, getsize1033for root, dirs, files in os.walk('python/Lib/email'):1034 print(root, "consumes", end=" ")1035 print(sum(getsize(join(root, name)) for name in files), end=" ")1036 print("bytes in", len(files), "non-directory files")1037 if 'CVS' in dirs:1038 dirs.remove('CVS') # не заходить в CVS-каталоги1039```10401041В следующем примере обход дерева снизу вверх обязателен: [`rmdir()`](https://python-all.ru/3.2/library/os.html#os.rmdir) не позволяет удалить каталог, пока он не пуст:10421043```python1044# Удалить всё, доступное из каталога с именем "top",1045# при условии отсутствия символических ссылок.1046# ВНИМАНИЕ: это опасно! Например, если top == '/', это1047# может удалить все ваши файлы на диске.1048import os1049for root, dirs, files in os.walk(top, topdown=False):1050 for name in files:1051 os.remove(os.path.join(root, name))1052 for name in dirs:1053 os.rmdir(os.path.join(root, name))1054```10551056## 15.1.6. Управление процессами10571058Эти функции можно использовать для создания процессов и управления ими.10591060Различные функции `exec*()` принимают список аргументов для новой программы, загружаемой в процесс. В каждом случае первый из этих аргументов передаётся новой программе как её собственное имя, а не как аргумент, который пользователь мог бы ввести в командной строке. Для программиста на C это `argv[0]`, передаваемое в функцию `main()` программы. Например, `os.execv('/bin/echo', ['foo', 'bar'])` выведет на стандартный вывод только `bar`; `foo` будет проигнорирован.10611062#### `os.abort()`10631064Генерирует сигнал `SIGABRT` для текущего процесса. В Unix поведение по умолчанию – создание дампа памяти; в Windows процесс немедленно возвращает код возврата `3`. Вызов этой функции не вызовет обработчик сигнала Python, зарегистрированный для `SIGABRT` с помощью [`signal.signal()`](https://python-all.ru/3.2/library/signal.html#signal.signal).10651066Доступность: Unix, Windows.10671068#### `os.execl(path, arg0, arg1, ...)`10691070#### `os.execle(path, arg0, arg1, ..., env)`10711072#### `os.execlp(file, arg0, arg1, ...)`10731074#### `os.execlpe(file, arg0, arg1, ..., env)`10751076#### `os.execv(path, args)`10771078#### `os.execve(path, args, env)`10791080#### `os.execvp(file, args)`10811082#### `os.execvpe(file, args, env)`10831084Все эти функции выполняют новую программу, заменяя текущий процесс; они не возвращают управление. В Unix новый исполняемый файл загружается в текущий процесс и будет иметь тот же идентификатор процесса, что и вызывающий. Ошибки будут возбуждаться как исключения [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError).10851086Текущий процесс заменяется немедленно. Открытые файловые объекты и дескрипторы не сбрасываются, поэтому, если на этих открытых файлах могут быть буферизованы данные, следует сбросить их с помощью `sys.stdout.flush()` или [`os.fsync()`](https://python-all.ru/3.2/library/os.html#os.fsync) перед вызовом функции `exec*()`.10871088Варианты «l» и «v» функций `exec*()` различаются способом передачи аргументов командной строки. Варианты «l», вероятно, проще всего использовать, если количество параметров фиксировано на момент написания кода; отдельные параметры просто становятся дополнительными параметрами функций `execl*()` . Варианты «v» хороши, когда количество параметров переменное: аргументы передаются в виде списка или кортежа в параметре *args* . В любом случае аргументы дочернего процесса должны начинаться с имени запускаемой команды, но это не является обязательным.10891090Варианты, содержащие «p» ближе к концу ([`execlp()`](https://python-all.ru/3.2/library/os.html#os.execlp), [`execlpe()`](https://python-all.ru/3.2/library/os.html#os.execlpe), [`execvp()`](https://python-all.ru/3.2/library/os.html#os.execvp) и [`execvpe()`](https://python-all.ru/3.2/library/os.html#os.execvpe)), будут использовать переменную окружения `PATH` для поиска программы *file*. Когда окружение заменяется (с использованием одного из вариантов `exec*e()`, обсуждаемых в следующем абзаце), новое окружение используется как источник переменной `PATH`. Остальные варианты – [`execl()`](https://python-all.ru/3.2/library/os.html#os.execl), [`execle()`](https://python-all.ru/3.2/library/os.html#os.execle), [`execv()`](https://python-all.ru/3.2/library/os.html#os.execv) и [`execve()`](https://python-all.ru/3.2/library/os.html#os.execve) – не используют переменную `PATH` для поиска исполняемого файла; *path* должен содержать подходящий абсолютный или относительный путь.10911092Для [`execle()`](https://python-all.ru/3.2/library/os.html#os.execle), [`execlpe()`](https://python-all.ru/3.2/library/os.html#os.execlpe), [`execve()`](https://python-all.ru/3.2/library/os.html#os.execve) и [`execvpe()`](https://python-all.ru/3.2/library/os.html#os.execvpe) (обратите внимание, что все они заканчиваются на «e») параметр *env* должен быть отображением, которое используется для определения переменных окружения нового процесса (они используются вместо окружения текущего процесса); функции [`execl()`](https://python-all.ru/3.2/library/os.html#os.execl), [`execlp()`](https://python-all.ru/3.2/library/os.html#os.execlp), [`execv()`](https://python-all.ru/3.2/library/os.html#os.execv) и [`execvp()`](https://python-all.ru/3.2/library/os.html#os.execvp) заставляют новый процесс наследовать окружение текущего процесса.10931094Доступность: Unix, Windows.10951096#### `os._exit(n)`10971098Завершает процесс с кодом *n*, без вызова обработчиков очистки, сброса буферов stdio и т.д.10991100Доступность: Unix, Windows.11011102> **Примечание**1103>1104> Стандартный способ завершения – `sys.exit(n)`. [`_exit()`](https://python-all.ru/3.2/library/os.html#os._exit) обычно следует использовать только в дочернем процессе после [`fork()`](https://python-all.ru/3.2/library/os.html#os.fork).11051106Следующие коды возврата определены и могут использоваться с [`_exit()`](https://python-all.ru/3.2/library/os.html#os._exit), хотя они не обязательны. Обычно они используются для системных программ, написанных на Python, например, для внешней программы доставки команд почтового сервера.11071108> **Примечание**1109>1110> Некоторые из них могут быть недоступны на всех платформах Unix, поскольку есть различия. Эти константы определены там, где они определены базовой платформой.11111112#### `os.EX_OK`11131114Код завершения, означающий, что ошибок не возникло.11151116Доступность: Unix.11171118#### `os.EX_USAGE`11191120Код завершения, означающий, что команда была использована неправильно, например, когда передано неверное количество аргументов.11211122Доступность: Unix.11231124#### `os.EX_DATAERR`11251126Код завершения, означающий, что входные данные были некорректны.11271128Доступность: Unix.11291130#### `os.EX_NOINPUT`11311132Код завершения, означающий, что входной файл не существовал или не был доступен для чтения.11331134Доступность: Unix.11351136#### `os.EX_NOUSER`11371138Код завершения, означающий, что указанный пользователь не существовал.11391140Доступность: Unix.11411142#### `os.EX_NOHOST`11431144Код завершения, означающий, что указанный хост не существовал.11451146Доступность: Unix.11471148#### `os.EX_UNAVAILABLE`11491150Код завершения, означающий, что требуемая служба недоступна.11511152Доступность: Unix.11531154#### `os.EX_SOFTWARE`11551156Код завершения, означающий, что обнаружена внутренняя программная ошибка.11571158Доступность: Unix.11591160#### `os.EX_OSERR`11611162Код завершения, означающий, что обнаружена ошибка операционной системы, например, невозможность выполнить fork или создать канал.11631164Доступность: Unix.11651166#### `os.EX_OSFILE`11671168Код завершения, означающий, что некоторый системный файл не существовал, не мог быть открыт или содержал ошибку другого рода.11691170Доступность: Unix.11711172#### `os.EX_CANTCREAT`11731174Код завершения, означающий, что указанный пользователем выходной файл не удалось создать.11751176Доступность: Unix.11771178#### `os.EX_IOERR`11791180Код выхода, означающий ошибку ввода-вывода при работе с каким-то файлом.11811182Доступность: Unix.11831184#### `os.EX_TEMPFAIL`11851186Код выхода, означающий временный сбой. Указывает на ситуацию, которая может и не быть ошибкой – например, на невозможность установить сетевое соединение при повторяемой операции.11871188Доступность: Unix.11891190#### `os.EX_PROTOCOL`11911192Код выхода, означающий, что обмен по протоколу был недопустимым, недействительным или нераспознанным.11931194Доступность: Unix.11951196#### `os.EX_NOPERM`11971198Код выхода, сообщающий о недостаточных правах для выполнения операции (не относится к проблемам файловой системы).11991200Доступность: Unix.12011202#### `os.EX_CONFIG`12031204Код выхода, указывающий на ошибку конфигурации.12051206Доступность: Unix.12071208#### `os.EX_NOTFOUND`12091210Код выхода, означающий нечто вроде «запись не найдена».12111212Доступность: Unix.12131214#### `os.fork()`12151216Создаёт дочерний процесс. Возвращает `0` в дочернем процессе и идентификатор дочернего процесса в родительском. Если происходит ошибка, возбуждается [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError).12171218Обратите внимание, что некоторые платформы, включая FreeBSD \<= 6.3, Cygwin и OS/2 EMX, имеют известные проблемы при использовании fork() из потока.12191220> **Предупреждение**1221>1222> О приложениях, использующих модуль SSL с fork(), см. [`ssl`](https://python-all.ru/3.2/library/ssl.html#module-ssl).12231224Доступность: Unix.12251226#### `os.forkpty()`12271228Создаёт дочерний процесс, используя новый псевдотерминал в качестве управляющего терминала дочернего процесса. Возвращает пару `(pid, fd)`, где *pid* равен `0` в дочернем процессе, идентификатору нового дочернего процесса в родительском, а *fd* – это файловый дескриптор ведущего конца псевдотерминала. Для более переносимого подхода используйте модуль [`pty`](https://python-all.ru/3.2/library/pty.html#module-pty). Если происходит ошибка, возбуждается [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError).12291230Доступность: некоторые разновидности Unix.12311232#### `os.kill(pid, sig)`12331234Отправляет сигнал *sig* процессу *pid*. Константы для конкретных сигналов, доступных на хост-платформе, определены в модуле [`signal`](https://python-all.ru/3.2/library/signal.html#module-signal).12351236Windows: сигналы [`signal.CTRL_C_EVENT`](https://python-all.ru/3.2/library/signal.html#signal.CTRL_C_EVENT) и [`signal.CTRL_BREAK_EVENT`](https://python-all.ru/3.2/library/signal.html#signal.CTRL_BREAK_EVENT) являются особыми – их можно отправлять только консольным процессам, имеющим общее окно консоли, например, некоторым подпроцессам. Любое другое значение *sig* приведет к безусловному завершению процесса через API TerminateProcess, а код возврата будет установлен в *sig*. Версия [`kill()`](https://python-all.ru/3.2/library/os.html#os.kill) для Windows дополнительно принимает дескрипторы процессов, которые нужно завершить.12371238Новое в версии 3.2: Поддержка Windows.12391240#### `os.killpg(pgid, sig)`12411242Отправить сигнал *sig* группе процессов *pgid*.12431244Доступность: Unix.12451246#### `os.nice(increment)`12471248Добавить *increment* к «приоритету» процесса. Возвращает новый приоритет.12491250Доступность: Unix.12511252#### `os.plock(op)`12531254Блокирует сегменты программы в памяти. Значение *op* (определено в `<sys/lock.h>`) определяет, какие сегменты будут заблокированы.12551256Доступность: Unix.12571258#### `os.popen(...)`12591260Запускает дочерние процессы и возвращает открытые каналы для взаимодействия. Эти функции описаны в разделе [*Создание файловых объектов*](https://python-all.ru/3.2/library/os.html#os-newstreams).12611262#### `os.spawnl(mode, path, ...)`12631264#### `os.spawnle(mode, path, ..., env)`12651266#### `os.spawnlp(mode, file, ...)`12671268#### `os.spawnlpe(mode, file, ..., env)`12691270#### `os.spawnv(mode, path, args)`12711272#### `os.spawnve(mode, path, args, env)`12731274#### `os.spawnvp(mode, file, args)`12751276#### `os.spawnvpe(mode, file, args, env)`12771278Выполняет программу *path* в новом процессе.12791280(Обратите внимание, что модуль [`subprocess`](https://python-all.ru/3.2/library/subprocess.html#module-subprocess) предоставляет более мощные средства для порождения новых процессов и получения их результатов; использование этого модуля предпочтительнее, чем этих функций. Особенно обратитесь к разделу [*Замена старых функций модулем subprocess*](https://python-all.ru/3.2/library/subprocess.html#subprocess-replacements).)12811282Если *mode* равен [`P_NOWAIT`](https://python-all.ru/3.2/library/os.html#os.P_NOWAIT), эта функция возвращает идентификатор нового процесса; если *mode* равен [`P_WAIT`](https://python-all.ru/3.2/library/os.html#os.P_WAIT), возвращает код завершения процесса, если он завершился нормально, или `-signal`, где *signal* – это сигнал, который убил процесс. В Windows идентификатор процесса на самом деле является дескриптором процесса, поэтому его можно использовать с функцией [`waitpid()`](https://python-all.ru/3.2/library/os.html#os.waitpid).12831284Варианты «l» и «v» функций `spawn*()` различаются способом передачи аргументов командной строки. Варианты «l», возможно, проще всего использовать, когда количество параметров фиксировано на момент написания кода: отдельные параметры просто становятся дополнительными параметрами функций `spawnl*()`. Варианты «v» удобны, когда количество параметров переменное, а аргументы передаются в виде списка или кортежа в параметре *args*. В любом случае аргументы дочернего процесса должны начинаться с имени выполняемой команды.12851286Варианты, содержащие вторую букву «p» ближе к концу ([`spawnlp()`](https://python-all.ru/3.2/library/os.html#os.spawnlp), [`spawnlpe()`](https://python-all.ru/3.2/library/os.html#os.spawnlpe), [`spawnvp()`](https://python-all.ru/3.2/library/os.html#os.spawnvp) и [`spawnvpe()`](https://python-all.ru/3.2/library/os.html#os.spawnvpe)), используют переменную окружения `PATH` для поиска программы *file*. Когда окружение заменяется (с помощью одного из вариантов `spawn*e()`, описанных в следующем абзаце), новое окружение используется как источник переменной `PATH`. Другие варианты – [`spawnl()`](https://python-all.ru/3.2/library/os.html#os.spawnl), [`spawnle()`](https://python-all.ru/3.2/library/os.html#os.spawnle), [`spawnv()`](https://python-all.ru/3.2/library/os.html#os.spawnv) и [`spawnve()`](https://python-all.ru/3.2/library/os.html#os.spawnve) – не используют переменную `PATH` для поиска исполняемого файла; *path* должен содержать подходящий абсолютный или относительный путь.12871288Для [`spawnle()`](https://python-all.ru/3.2/library/os.html#os.spawnle), [`spawnlpe()`](https://python-all.ru/3.2/library/os.html#os.spawnlpe), [`spawnve()`](https://python-all.ru/3.2/library/os.html#os.spawnve), [`spawnvpe()`](https://python-all.ru/3.2/library/os.html#os.spawnvpe) (обратите внимание, что все они заканчиваются на «e») параметр *env* должен быть отображением (mapping), которое используется для определения переменных окружения нового процесса (они используются вместо окружения текущего процесса); функции [`spawnl()`](https://python-all.ru/3.2/library/os.html#os.spawnl), [`spawnlp()`](https://python-all.ru/3.2/library/os.html#os.spawnlp), [`spawnv()`](https://python-all.ru/3.2/library/os.html#os.spawnv), [`spawnvp()`](https://python-all.ru/3.2/library/os.html#os.spawnvp) заставляют новый процесс наследовать окружение текущего процесса. Обратите внимание, что ключи и значения в словаре *env* должны быть строками; недопустимые ключи или значения приведут к ошибке функции, с возвращаемым значением `127`.12891290В качестве примера следующие вызовы [`spawnlp()`](https://python-all.ru/3.2/library/os.html#os.spawnlp) и [`spawnvpe()`](https://python-all.ru/3.2/library/os.html#os.spawnvpe) эквивалентны:12911292```python1293import os1294os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null')12951296L = ['cp', 'index.html', '/dev/null']1297os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)1298```12991300Доступность: Unix, Windows. [`spawnlp()`](https://python-all.ru/3.2/library/os.html#os.spawnlp), [`spawnlpe()`](https://python-all.ru/3.2/library/os.html#os.spawnlpe), [`spawnvp()`](https://python-all.ru/3.2/library/os.html#os.spawnvp) и [`spawnvpe()`](https://python-all.ru/3.2/library/os.html#os.spawnvpe) недоступны в Windows. [`spawnle()`](https://python-all.ru/3.2/library/os.html#os.spawnle) и [`spawnve()`](https://python-all.ru/3.2/library/os.html#os.spawnve) не являются потокобезопасными в Windows; рекомендуется использовать модуль [`subprocess`](https://python-all.ru/3.2/library/subprocess.html#module-subprocess).13011302#### `os.P_NOWAIT`13031304#### `os.P_NOWAITO`13051306Возможные значения параметра *mode* для семейства функций `spawn*()`. Если указано одно из этих значений, функции `spawn*()` возвращают управление сразу после создания нового процесса, возвращая его идентификатор.13071308Доступность: Unix, Windows.13091310#### `os.P_WAIT`13111312Возможное значение параметра *mode* для семейства функций `spawn*()`. Если в качестве *mode* указано это значение, функции `spawn*()` не вернут управление, пока новый процесс не завершится, и вернут код завершения процесса в случае успешного выполнения или `-signal`, если процесс был убит сигналом.13131314Доступность: Unix, Windows.13151316#### `os.P_DETACH`13171318#### `os.P_OVERLAY`13191320Возможные значения параметра *mode* для семейства функций `spawn*()`. Они менее переносимы, чем перечисленные выше. [`P_DETACH`](https://python-all.ru/3.2/library/os.html#os.P_DETACH) аналогичен [`P_NOWAIT`](https://python-all.ru/3.2/library/os.html#os.P_NOWAIT), но новый процесс отсоединяется от консоли вызывающего процесса. Если используется [`P_OVERLAY`](https://python-all.ru/3.2/library/os.html#os.P_OVERLAY), текущий процесс будет заменён; функция `spawn*()` не вернёт управление.13211322Доступность: Windows.13231324#### `os.startfile(path[, operation])`13251326Запускает файл в связанном с ним приложении.13271328Если *operation* не указан или равен `'open'`, это работает как двойной щелчок по файлу в Проводнике Windows или передача имени файла в качестве аргумента команде **start** из интерактивной командной оболочки: файл открывается приложением (если оно есть), связанным с его расширением.13291330Если указано другое значение *operation*, оно должно быть «командным глаголом» (command verb), определяющим, что следует сделать с файлом. Распространённые глаголы, документированные Microsoft: `'print'` и `'edit'` (используются для файлов), а также `'explore'` и `'find'` (используются для каталогов).13311332[`startfile()`](https://python-all.ru/3.2/library/os.html#os.startfile) возвращает управление сразу после запуска связанного приложения. Нет возможности дождаться закрытия приложения или получить его код завершения. Параметр *path* задаётся относительно текущего каталога. Если требуется использовать абсолютный путь, убедитесь, что первый символ не является косой чертой (`'/'`); в этом случае базовая функция Win32 `ShellExecute()` не работает. Используйте функцию [`os.path.normpath()`](https://python-all.ru/3.2/library/os.path.html#os.path.normpath), чтобы гарантировать правильную кодировку пути для Win32.13331334Доступность: Windows.13351336#### `os.system(command)`13371338Выполняет команду (строку) в подчиненной оболочке (subshell). Реализовано вызовом стандартной функции C `system()` и имеет те же ограничения. Изменения [`sys.stdin`](https://python-all.ru/3.2/library/sys.html#sys.stdin) и т.п. не отражаются в окружении выполняемой команды. Если *command* генерирует какой-либо вывод, он будет отправлен в стандартный поток вывода интерпретатора.13391340В Unix возвращаемое значение – это код завершения процесса, закодированный в формате, указанном для [`wait()`](https://python-all.ru/3.2/library/os.html#os.wait). Обратите внимание, что POSIX не определяет значение возвращаемого значения функции C `system()`, поэтому возвращаемое значение функции Python зависит от системы.13411342В Windows возвращаемое значение – это то, что возвращает системная оболочка после выполнения *command*. Оболочка задается переменной окружения Windows `COMSPEC`; обычно это **cmd.exe**, которая возвращает код завершения выполненной команды; в системах, использующих нестандартную оболочку, обратитесь к документации вашей оболочки.13431344Модуль [`subprocess`](https://python-all.ru/3.2/library/subprocess.html#module-subprocess) предоставляет более мощные средства для порождения новых процессов и получения их результатов; использование этого модуля предпочтительнее использования этой функции. Смотрите раздел [*Замена старых функций модулем subprocess*](https://python-all.ru/3.2/library/subprocess.html#subprocess-replacements) в документации модуля [`subprocess`](https://python-all.ru/3.2/library/subprocess.html#module-subprocess) для полезных примеров.13451346Доступность: Unix, Windows.13471348#### `os.times()`13491350Возвращает кортеж из 5 чисел с плавающей запятой, указывающих накопленное (процессорное или иное) время в секундах. Элементы: пользовательское время, системное время, пользовательское время дочерних процессов, системное время дочерних процессов и прошедшее реальное время с некоторой фиксированной точки в прошлом – именно в таком порядке. См. страницу руководства Unix *times(2)* или соответствующую документацию Windows Platform API. В Windows заполнены только первые два элемента, остальные равны нулю.13511352Доступность: Unix, Windows13531354#### `os.wait()`13551356Ожидает завершения дочернего процесса и возвращает кортеж, содержащий его PID и индикатор статуса выхода: 16-битное число, младший байт которого – номер сигнала, завершившего процесс, а старший байт – статус выхода (если номер сигнала равен нулю); старший бит младшего байта установлен, если был создан файл core.13571358Доступность: Unix.13591360#### `os.waitpid(pid, options)`13611362Подробности этой функции различаются в Unix и Windows.13631364В Unix: ожидает завершения дочернего процесса с идентификатором *pid* и возвращает кортеж, содержащий его идентификатор и код завершения (закодирован так же, как для [`wait()`](https://python-all.ru/3.2/library/os.html#os.wait)). Семантика вызова зависит от значения целочисленного *options*, которое должно быть `0` для обычного режима.13651366Если *pid* больше `0`, [`waitpid()`](https://python-all.ru/3.2/library/os.html#os.waitpid) запрашивает информацию о состоянии для этого конкретного процесса. Если *pid* равен `0`, запрос касается состояния любого дочернего процесса в группе процессов текущего процесса. Если *pid* равен `-1`, запрос относится к любому дочернему процессу текущего процесса. Если *pid* меньше `-1`, состояние запрашивается для любого процесса в группе процессов `-pid` (абсолютное значение *pid*).13671368Исключение [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError) возбуждается со значением errno, когда системный вызов возвращает -1.13691370В Windows: ожидает завершения процесса, заданного дескриптором процесса *pid*, и возвращает кортеж, содержащий *pid* и его код завершения, сдвинутый влево на 8 бит (сдвиг упрощает кроссплатформенное использование функции). *pid* меньше или равный `0` в Windows не имеет особого значения и вызывает исключение. Значение целочисленного параметра *options* не влияет на результат. *pid* может ссылаться на любой процесс с известным идентификатором, не обязательно дочерний. Функции `spawn()`, вызванные с [`P_NOWAIT`](https://python-all.ru/3.2/library/os.html#os.P_NOWAIT), возвращают подходящие дескрипторы процессов.13711372#### `os.wait3(options)`13731374Аналогична [`waitpid()`](https://python-all.ru/3.2/library/os.html#os.waitpid), за исключением того, что не принимает аргумент с идентификатором процесса, а возвращает кортеж из 3 элементов: идентификатор дочернего процесса, признак статуса завершения и информацию об использовании ресурсов. Подробнее об использовании ресурсов см. [`resource`](https://python-all.ru/3.2/library/resource.html#module-resource).`getrusage()`. Аргумент опций – тот же, что передаётся в [`waitpid()`](https://python-all.ru/3.2/library/os.html#os.waitpid) и [`wait4()`](https://python-all.ru/3.2/library/os.html#os.wait4).13751376Доступность: Unix.13771378#### `os.wait4(pid, options)`13791380Аналогична [`waitpid()`](https://python-all.ru/3.2/library/os.html#os.waitpid), за исключением того, что возвращает кортеж из 3 элементов: идентификатор дочернего процесса, признак статуса завершения и информацию об использовании ресурсов. Подробнее об информации об использовании ресурсов см. [`resource`](https://python-all.ru/3.2/library/resource.html#module-resource).`getrusage()`. Аргументы [`wait4()`](https://python-all.ru/3.2/library/os.html#os.wait4) те же, что и у [`waitpid()`](https://python-all.ru/3.2/library/os.html#os.waitpid).13811382Доступность: Unix.13831384#### `os.WNOHANG`13851386Опция [`waitpid()`](https://python-all.ru/3.2/library/os.html#os.waitpid) для немедленного возврата, если статус дочернего процесса недоступен сразу. В этом случае функция возвращает `(0, 0)`.13871388Доступность: Unix.13891390#### `os.WCONTINUED`13911392Эта опция позволяет сообщать о дочерних процессах, если они были возобновлены после остановки управления заданием с момента последнего сообщения их статуса.13931394Доступность: некоторые системы Unix.13951396#### `os.WUNTRACED`13971398Этот параметр заставляет сообщать о дочерних процессах, если они были остановлены, но их текущее состояние ещё не было сообщено с момента остановки.13991400Доступность: Unix.14011402Следующие функции принимают код статуса процесса, возвращаемый [`system()`](https://python-all.ru/3.2/library/os.html#os.system), [`wait()`](https://python-all.ru/3.2/library/os.html#os.wait) или [`waitpid()`](https://python-all.ru/3.2/library/os.html#os.waitpid) в качестве параметра. Они могут использоваться для определения состояния процесса.14031404#### `os.WCOREDUMP(status)`14051406Возвращает `True`, если для процесса был сгенерирован дамп ядра, иначе возвращает `False`.14071408Доступность: Unix.14091410#### `os.WIFCONTINUED(status)`14111412Возвращает `True`, если процесс был возобновлён после остановки управления заданиями, иначе возвращает `False`.14131414Доступность: Unix.14151416#### `os.WIFSTOPPED(status)`14171418Возвращает `True`, если процесс был остановлен, иначе возвращает `False`.14191420Доступность: Unix.14211422#### `os.WIFSIGNALED(status)`14231424Возвращает `True`, если процесс завершился из-за сигнала, иначе возвращает `False`.14251426Доступность: Unix.14271428#### `os.WIFEXITED(status)`14291430Возвращает `True`, если процесс завершился с помощью системного вызова *exit(2)*, иначе возвращает `False`.14311432Доступность: Unix.14331434#### `os.WEXITSTATUS(status)`14351436Если `WIFEXITED(status)` истинно, возвращает целочисленный параметр системного вызова *exit(2)*. В противном случае возвращаемое значение не имеет смысла.14371438Доступность: Unix.14391440#### `os.WSTOPSIG(status)`14411442Возвращает сигнал, который вызвал остановку процесса.14431444Доступность: Unix.14451446#### `os.WTERMSIG(status)`14471448Возвращает сигнал, который вызвал завершение процесса.14491450Доступность: Unix.14511452## 15.1.7. Разная системная информация14531454#### `os.confstr(name)`14551456Возвращает строковые значения системных конфигураций. *name* задаёт значение конфигурации для получения; это может быть строка – имя определённого системного значения; эти имена указаны в ряде стандартов (POSIX, Unix 95, Unix 98 и других). Некоторые платформы определяют также дополнительные имена. Имена, известные операционной системе, представлены как ключи словаря `confstr_names`. Для переменных конфигурации, не включённых в это соответствие, также допускается передача целого числа в качестве *name*.14571458Если значение конфигурации, указанное *name*, не определено, возвращается `None`.14591460Если *name* – строка и неизвестна, возбуждается [`ValueError`](https://python-all.ru/3.2/library/exceptions.html#ValueError). Если конкретное значение для *name* не поддерживается системой, даже если оно включено в `confstr_names`, возбуждается [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError) с [`errno.EINVAL`](https://python-all.ru/3.2/library/errno.html#errno.EINVAL) в качестве кода ошибки.14611462Доступность: Unix14631464#### `os.confstr_names`14651466Словарь, сопоставляющий имена, принимаемые [`confstr()`](https://python-all.ru/3.2/library/os.html#os.confstr), с целочисленными значениями, определёнными для этих имён операционной системой. Может использоваться для определения набора имён, известных системе.14671468Доступность: Unix.14691470#### `os.getloadavg()`14711472Возвращает количество процессов в очереди выполнения системы, усреднённое за последние 1, 5 и 15 минут, или возбуждает [`OSError`](https://python-all.ru/3.2/library/exceptions.html#OSError), если среднюю нагрузку не удалось получить.14731474Доступность: Unix.14751476#### `os.sysconf(name)`14771478Возвращает целочисленные значения системных конфигураций. Если значение конфигурации, указанное *name*, не определено, возвращается `-1`. Замечания относительно параметра *name* для [`confstr()`](https://python-all.ru/3.2/library/os.html#os.confstr) применимы и здесь; словарь, предоставляющий информацию об известных именах, задаётся `sysconf_names`.14791480Доступность: Unix.14811482#### `os.sysconf_names`14831484Словарь, сопоставляющий имена, принимаемые [`sysconf()`](https://python-all.ru/3.2/library/os.html#os.sysconf), с целочисленными значениями, определёнными для этих имён операционной системой. Может использоваться для определения набора имён, известных системе.14851486Доступность: Unix.14871488Следующие значения данных используются для поддержки операций с путями. Они определены для всех платформ.14891490Операции более высокого уровня над путями определены в модуле [`os.path`](https://python-all.ru/3.2/library/os.path.html#module-os.path).14911492#### `os.curdir`14931494Строковая константа, используемая операционной системой для обозначения текущего каталога. Это `'.'` для Windows и POSIX. Также доступна через [`os.path`](https://python-all.ru/3.2/library/os.path.html#module-os.path).14951496#### `os.pardir`14971498Строковая константа, используемая операционной системой для обозначения родительского каталога. Это `'..'` для Windows и POSIX. Также доступна через [`os.path`](https://python-all.ru/3.2/library/os.path.html#module-os.path).14991500#### `os.sep`15011502Символ, используемый операционной системой для разделения компонентов пути. Это `'/'` для POSIX и `'\\'` для Windows. Обратите внимание, что знания этого недостаточно для разбора или объединения путей – используйте [`os.path.split()`](https://python-all.ru/3.2/library/os.path.html#os.path.split) и [`os.path.join()`](https://python-all.ru/3.2/library/os.path.html#os.path.join), однако это бывает полезно. Также доступен через [`os.path`](https://python-all.ru/3.2/library/os.path.html#module-os.path).15031504#### `os.altsep`15051506Альтернативный символ, используемый операционной системой для разделения компонентов пути, или `None`, если существует только один разделитель. Устанавливается в `'/'` в Windows, где `sep` является обратной косой чертой. Также доступен через [`os.path`](https://python-all.ru/3.2/library/os.path.html#module-os.path).15071508#### `os.extsep`15091510Символ, отделяющий основное имя файла от расширения; например, `'.'` в `os.py`. Также доступен через [`os.path`](https://python-all.ru/3.2/library/os.path.html#module-os.path).15111512#### `os.pathsep`15131514Символ, традиционно используемый операционной системой для разделения компонентов пути поиска (как в `PATH`), например `':'` для POSIX или `';'` для Windows. Также доступен через [`os.path`](https://python-all.ru/3.2/library/os.path.html#module-os.path).15151516#### `os.defpath`15171518Путь поиска по умолчанию, используемый `exec*p*()` и `spawn*p*()`, если в окружении отсутствует ключ `'PATH'`. Также доступен через [`os.path`](https://python-all.ru/3.2/library/os.path.html#module-os.path).15191520#### `os.linesep`15211522Строка, используемая для разделения (вернее, завершения) строк на текущей платформе. Это может быть один символ, например `'\\n'` для POSIX, или несколько символов, например `'\\r\\n'` для Windows. Не используйте *os.linesep* в качестве завершителя строк при записи в файлы, открытые в текстовом режиме (режим по умолчанию); вместо этого используйте одиночный `'\\n'` на всех платформах.15231524#### `os.devnull`15251526Путь к нулевому устройству. Например: `'/dev/null'` для POSIX, `'nul'` для Windows. Также доступен через [`os.path`](https://python-all.ru/3.2/library/os.path.html#module-os.path).15271528## 15.1.8. Разные функции15291530#### `os.urandom(n)`15311532Возвращает строку из *n* случайных байтов, пригодных для криптографического использования.15331534Эта функция возвращает случайные байты из источника случайности, зависящего от ОС. Возвращаемые данные должны быть достаточно непредсказуемыми для криптографических приложений, хотя их точное качество зависит от реализации ОС. В UNIX-подобных системах она обращается к /dev/urandom, а в Windows использует CryptGenRandom. Если источник случайности не найден, будет возбуждено исключение [`NotImplementedError`](https://python-all.ru/3.2/library/exceptions.html#NotImplementedError).1535