Документация Python неофициальный перевод

os.md

2481 строк · 222.6 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.5/library/os.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 16.1. [`os`](https://python-all.ru/3.5/library/os.html#module-os) – Различные интерфейсы операционной системы89**Исходный код:** [Lib/os.py](https://python-all.ru/src/3.5/Lib/os.py)1011---1213Этот модуль предоставляет переносимый способ использования функций, зависящих от операционной системы. Если нужно просто прочитать или записать файл, см. [`open()`](https://python-all.ru/3.5/library/functions.html#open); для работы с путями используйте модуль [`os.path`](https://python-all.ru/3.5/library/os.path.html#module-os.path); для чтения всех строк из всех файлов в командной строке – модуль [`fileinput`](https://python-all.ru/3.5/library/fileinput.html#module-fileinput). Для создания временных файлов и каталогов обратитесь к модулю [`tempfile`](https://python-all.ru/3.5/library/tempfile.html#module-tempfile), а для высокоуровневой работы с файлами и каталогами – к модулю [`shutil`](https://python-all.ru/3.5/library/shutil.html#module-shutil).1415Примечания о доступности этих функций:1617- Все встроенные модули Python, зависящие от операционной системы, устроены так, что при наличии одинаковой функциональности они используют один и тот же интерфейс; например, функция `os.stat(path)` возвращает информацию stat о *пути* в одном и том же формате (который, как вышло, берёт начало от интерфейса POSIX).18- Расширения, характерные для конкретной операционной системы, также доступны через модуль [`os`](https://python-all.ru/3.5/library/os.html#module-os), но их использование, конечно, угрожает переносимости.19- Все функции, принимающие пути или имена файлов, принимают как объекты bytes, так и строки, и возвращают объект того же типа, если возвращается путь или имя файла.20- Примечание «Доступность: Unix» означает, что эта функция обычно встречается в системах Unix. Оно не утверждает о её существовании в конкретной операционной системе.21- Если не указано иное, все функции, для которых указано «Доступность: Unix», поддерживаются на Mac OS X, построенной на ядре Unix.2223> **Примечание**24>25> Все функции в этом модуле возбуждают [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError) в случае недопустимых или недоступных имен файлов и путей, или других аргументов, имеющих правильный тип, но не принимаемых операционной системой.2627#### `exception os.error`2829Псевдоним для встроенного исключения [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError).3031#### `os.name`3233Имя импортированного модуля, зависящего от операционной системы. В настоящий момент зарегистрированы следующие имена: `'posix'`, `'nt'`, `'ce'`, `'java'`.3435> **См. также**36>37> [`sys.platform`](https://python-all.ru/3.5/library/sys.html#sys.platform) имеет более мелкую гранулярность. [`os.uname()`](https://python-all.ru/3.5/library/os.html#os.uname) предоставляет системно-зависимую информацию о версии.38>39> Модуль [`platform`](https://python-all.ru/3.5/library/platform.html#module-platform) предоставляет подробные проверки идентификации системы.4041## 16.1.1. Имена файлов, аргументы командной строки и переменные окружения4243В Python имена файлов, аргументы командной строки и переменные окружения представляются строковым типом. В некоторых системах перед передачей операционной системе эти строки необходимо декодировать из байтов и в байты. Python использует кодировку файловой системы для выполнения этого преобразования (см. [`sys.getfilesystemencoding()`](https://python-all.ru/3.5/library/sys.html#sys.getfilesystemencoding)).4445Изменено в версии 3.1: В некоторых системах преобразование с использованием кодировки файловой системы может завершиться ошибкой. В этом случае Python использует [обработчик ошибок кодирования surrogateescape](https://python-all.ru/3.5/library/codecs.html#surrogateescape), что означает, что нераскодируемые байты заменяются на символ Unicode U+DCxx при декодировании, а затем снова преобразуются в исходные байты при кодировании.4647Кодировка файловой системы должна гарантировать успешное декодирование всех байтов ниже 128. Если кодировка файловой системы не может этого гарантировать, функции API могут вызывать исключения Unicode.4849## 16.1.2. Параметры процесса5051Эти функции и элементы данных предоставляют информацию о текущем процессе и пользователе, а также позволяют с ними работать.5253#### `os.ctermid()`5455Возвращает имя файла, соответствующее управляющему терминалу процесса.5657Доступность: Unix.5859#### `os.environ`6061[Отображение](https://python-all.ru/3.5/glossary.html#term-mapping), представляющее строковое окружение. Например, `environ['HOME']` – это путь к домашнему каталогу (на некоторых платформах), и эквивалентно `getenv("HOME")` в C.6263Это отображение захватывается при первом импорте модуля [`os`](https://python-all.ru/3.5/library/os.html#module-os), обычно во время запуска Python при обработке `site.py`. Изменения окружения, сделанные после этого момента, не отражаются в `os.environ`, за исключением изменений, выполненных путём прямого изменения `os.environ`.6465Если платформа поддерживает функцию [`putenv()`](https://python-all.ru/3.5/library/os.html#os.putenv), это отображение можно использовать как для изменения окружения, так и для его запроса. [`putenv()`](https://python-all.ru/3.5/library/os.html#os.putenv) будет вызвана автоматически при изменении отображения.6667В Unix ключи и значения используют [`sys.getfilesystemencoding()`](https://python-all.ru/3.5/library/sys.html#sys.getfilesystemencoding) и обработчик ошибок `'surrogateescape'`. Используйте [`environb`](https://python-all.ru/3.5/library/os.html#os.environb), если требуется другая кодировка.6869> **Примечание**70>71> Вызов [`putenv()`](https://python-all.ru/3.5/library/os.html#os.putenv) напрямую не изменяет `os.environ`, поэтому лучше изменять `os.environ`.7273> **Примечание**74>75> На некоторых платформах, включая FreeBSD и Mac OS X, установка `environ` может вызвать утечки памяти. Обратитесь к системной документации `putenv()`.7677Если [`putenv()`](https://python-all.ru/3.5/library/os.html#os.putenv) не указано, изменённая копия этого отображения может быть передана соответствующим функциям создания процессов, чтобы дочерние процессы использовали изменённое окружение.7879Если платформа поддерживает функцию [`unsetenv()`](https://python-all.ru/3.5/library/os.html#os.unsetenv), можно удалять элементы из этого отображения, чтобы сбросить переменные окружения. [`unsetenv()`](https://python-all.ru/3.5/library/os.html#os.unsetenv) будет вызвана автоматически при удалении элемента из `os.environ`, а также при вызове одного из методов `pop()` или `clear()`.8081#### `os.environb`8283Байтовая версия [`environ`](https://python-all.ru/3.5/library/os.html#os.environ): [отображение](https://python-all.ru/3.5/glossary.html#term-mapping), представляющее окружение в виде байтовых строк. [`environ`](https://python-all.ru/3.5/library/os.html#os.environ) и [`environb`](https://python-all.ru/3.5/library/os.html#os.environb) синхронизированы (изменение [`environb`](https://python-all.ru/3.5/library/os.html#os.environb) обновляет [`environ`](https://python-all.ru/3.5/library/os.html#os.environ), и наоборот).8485[`environb`](https://python-all.ru/3.5/library/os.html#os.environb) доступен только если [`supports_bytes_environ`](https://python-all.ru/3.5/library/os.html#os.supports_bytes_environ) имеет значение True.8687Новое в версии 3.2.8889#### `os.chdir(path)`9091#### `os.fchdir(fd)`9293#### `os.getcwd()`9495Эти функции описаны в [Files and Directories](https://python-all.ru/3.5/library/os.html#os-file-dir).9697#### `os.fsencode(filename)`9899Кодировать *filename* в кодировку файловой системы с обработчиком ошибок `'surrogateescape'` или `'strict'` в Windows; вернуть [`bytes`](https://python-all.ru/3.5/library/functions.html#bytes) без изменений.100101[`fsdecode()`](https://python-all.ru/3.5/library/os.html#os.fsdecode) – обратная функция.102103Новое в версии 3.2.104105#### `os.fsdecode(filename)`106107Декодировать *filename* из кодировки файловой системы с обработчиком ошибок `'surrogateescape'` или `'strict'` в Windows; вернуть [`str`](https://python-all.ru/3.5/library/stdtypes.html#str) без изменений.108109[`fsencode()`](https://python-all.ru/3.5/library/os.html#os.fsencode) – обратная функция.110111Новое в версии 3.2.112113#### `os.getenv(key, default=None)`114115Возвращает значение переменной окружения *ключ*, если она существует, или *значение по умолчанию*, если нет. *ключ*, *значение по умолчанию* и результат имеют тип str.116117В Unix ключи и значения декодируются с помощью [`sys.getfilesystemencoding()`](https://python-all.ru/3.5/library/sys.html#sys.getfilesystemencoding) и обработчика ошибок `'surrogateescape'`. Используйте [`os.getenvb()`](https://python-all.ru/3.5/library/os.html#os.getenvb), если tребуется другая кодировка.118119Доступность: большинство разновидностей Unix, Windows.120121#### `os.getenvb(key, default=None)`122123Возвращает значение переменной окружения *ключ*, если она существует, или *значение по умолчанию*, если нет. *ключ*, *значение по умолчанию* и результат имеют тип bytes.124125[`getenvb()`](https://python-all.ru/3.5/library/os.html#os.getenvb) доступен только если [`supports_bytes_environ`](https://python-all.ru/3.5/library/os.html#os.supports_bytes_environ) имеет значение True.126127Доступность: большинство разновидностей Unix.128129Новое в версии 3.2.130131#### `os.get_exec_path(env=None)`132133Возвращает список каталогов, в которых будет выполняться поиск указанного исполняемого файла, аналогично оболочке, при запуске процесса. *env*, если указан, должен быть словарём переменных окружения, в котором искать PATH. По умолчанию, когда *env* равен `None`, используется [`environ`](https://python-all.ru/3.5/library/os.html#os.environ).134135Новое в версии 3.2.136137#### `os.getegid()`138139Возвращает эффективный идентификатор группы текущего процесса. Это соответствует биту «set id» у файла, выполняемого в текущем процессе.140141Доступность: Unix.142143#### `os.geteuid()`144145Возвращает эффективный идентификатор пользователя текущего процесса.146147Доступность: Unix.148149#### `os.getgid()`150151Возвращает реальный идентификатор группы текущего процесса.152153Доступность: Unix.154155#### `os.getgrouplist(user, group)`156157Возвращает список идентификаторов групп, к которым принадлежит *user*. Если *group* отсутствует в списке, она добавляется; обычно *group* указывается как поле идентификатора группы из записи пароля для *user*.158159Доступность: Unix.160161Новое в версии 3.3.162163#### `os.getgroups()`164165Возвращает список дополнительных идентификаторов групп, связанных с текущим процессом.166167Доступность: Unix.168169> **Примечание**170>171> На Mac OS X поведение [`getgroups()`](https://python-all.ru/3.5/library/os.html#os.getgroups) несколько отличается от других Unix-платформ. Если интерпретатор Python был собран с целевой версией развёртывания `10.5` или более ранней, [`getgroups()`](https://python-all.ru/3.5/library/os.html#os.getgroups) возвращает список эффективных идентификаторов групп, связанных с текущим процессом пользователя; этот список ограничен системным максимальным количеством записей, обычно 16, и может изменяться вызовами [`setgroups()`](https://python-all.ru/3.5/library/os.html#os.setgroups) при наличии соответствующих привилегий. Если интерпретатор собран с целевой версией развёртывания больше `10.5`, [`getgroups()`](https://python-all.ru/3.5/library/os.html#os.getgroups) возвращает текущий список доступа к группам для пользователя, связанного с эффективным идентификатором пользователя процесса; этот список может меняться в течение времени жизни процесса, на него не влияют вызовы [`setgroups()`](https://python-all.ru/3.5/library/os.html#os.setgroups), и его длина не ограничена 16. Значение целевой версии развёртывания, `MACOSX_DEPLOYMENT_TARGET`, можно получить с помощью [`sysconfig.get_config_var()`](https://python-all.ru/3.5/library/sysconfig.html#sysconfig.get_config_var).172173#### `os.getlogin()`174175Возвращает имя пользователя, вошедшего в управляющий терминал процесса. В большинстве случаев удобнее использовать переменные окружения `LOGNAME` или `USERNAME`, чтобы узнать, кто пользователь, или `pwd.getpwuid(os.getuid())[0]` для получения имени входа текущего реального идентификатора пользователя.176177Доступность: Unix, Windows.178179#### `os.getpgid(pid)`180181Возвращает идентификатор группы процессов для процесса с идентификатором *pid*. Если *pid* равен 0, возвращается идентификатор группы текущего процесса.182183Доступность: Unix.184185#### `os.getpgrp()`186187Возвращает идентификатор текущей группы процессов.188189Доступность: Unix.190191#### `os.getpid()`192193Возвращает идентификатор текущего процесса.194195#### `os.getppid()`196197Возвращает идентификатор родительского процесса. Когда родительский процесс завершился, в Unix возвращается идентификатор процесса init (1), а в Windows – тот же самый идентификатор, который к тому моменту может быть уже занят другим процессом.198199Доступность: Unix, Windows.200201Изменено в версии 3.2: Добавлена поддержка Windows.202203#### `os.getpriority(which, who)`204205Получает приоритет планирования программы. Значение *which* – одно из [`PRIO_PROCESS`](https://python-all.ru/3.5/library/os.html#os.PRIO_PROCESS), [`PRIO_PGRP`](https://python-all.ru/3.5/library/os.html#os.PRIO_PGRP) или [`PRIO_USER`](https://python-all.ru/3.5/library/os.html#os.PRIO_USER), а *who* интерпретируется относительно *which* (идентификатор процесса для [`PRIO_PROCESS`](https://python-all.ru/3.5/library/os.html#os.PRIO_PROCESS), идентификатор группы процессов для [`PRIO_PGRP`](https://python-all.ru/3.5/library/os.html#os.PRIO_PGRP) и идентификатор пользователя для [`PRIO_USER`](https://python-all.ru/3.5/library/os.html#os.PRIO_USER)). Нулевое значение *who* обозначает (соответственно) вызывающий процесс, группу процессов вызывающего процесса или реальный идентификатор пользователя вызывающего процесса.206207Доступность: Unix.208209Новое в версии 3.3.210211#### `os.PRIO_PROCESS`212213#### `os.PRIO_PGRP`214215#### `os.PRIO_USER`216217Параметры для функций [`getpriority()`](https://python-all.ru/3.5/library/os.html#os.getpriority) и [`setpriority()`](https://python-all.ru/3.5/library/os.html#os.setpriority).218219Доступность: Unix.220221Новое в версии 3.3.222223#### `os.getresuid()`224225Возвращает кортеж (ruid, euid, suid), обозначающий реальный, эффективный и сохранённый идентификаторы пользователя текущего процесса.226227Доступность: Unix.228229Новое в версии 3.2.230231#### `os.getresgid()`232233Возвращает кортеж (rgid, egid, sgid), обозначающий реальный, эффективный и сохранённый идентификаторы группы текущего процесса.234235Доступность: Unix.236237Новое в версии 3.2.238239#### `os.getuid()`240241Возвращает реальный идентификатор пользователя текущего процесса.242243Доступность: Unix.244245#### `os.initgroups(username, gid)`246247Вызывает системную функцию initgroups() для инициализации списка доступа к группам, который включает все группы, в которые входит указанное имя пользователя, а также указанный идентификатор группы.248249Доступность: Unix.250251Новое в версии 3.2.252253#### `os.putenv(key, value)`254255Устанавливает переменную окружения с именем *key* в строку *value*. Такие изменения окружения влияют на подпроцессы, запущенные с помощью [`os.system()`](https://python-all.ru/3.5/library/os.html#os.system), [`popen()`](https://python-all.ru/3.5/library/os.html#os.popen) или [`fork()`](https://python-all.ru/3.5/library/os.html#os.fork) и [`execv()`](https://python-all.ru/3.5/library/os.html#os.execv).256257Доступность: большинство разновидностей Unix, Windows.258259> **Примечание**260>261> На некоторых платформах, включая FreeBSD и Mac OS X, установка `environ` может вызвать утечки памяти. Обратитесь к системной документации по putenv.262263Когда [`putenv()`](https://python-all.ru/3.5/library/os.html#os.putenv) поддерживается, присваивания элементам `os.environ` автоматически преобразуются в соответствующие вызовы [`putenv()`](https://python-all.ru/3.5/library/os.html#os.putenv); однако вызовы [`putenv()`](https://python-all.ru/3.5/library/os.html#os.putenv) не обновляют `os.environ`, поэтому на самом деле предпочтительнее присваивать значения элементам `os.environ`.264265#### `os.setegid(egid)`266267Устанавливает эффективный идентификатор группы текущего процесса.268269Доступность: Unix.270271#### `os.seteuid(euid)`272273Устанавливает эффективный идентификатор пользователя текущего процесса.274275Доступность: Unix.276277#### `os.setgid(gid)`278279Устанавливает идентификатор группы текущего процесса.280281Доступность: Unix.282283#### `os.setgroups(groups)`284285Устанавливает список дополнительных идентификаторов групп, связанных с текущим процессом, в *groups*. *groups* должен быть последовательностью, и каждый элемент должен быть целым числом, идентифицирующим группу. Эта операция обычно доступна только суперпользователю.286287Доступность: Unix.288289> **Примечание**290>291> На Mac OS X длина *groups* не может превышать системного максимального количества эффективных идентификаторов групп, обычно 16. Обратитесь к документации [`getgroups()`](https://python-all.ru/3.5/library/os.html#os.getgroups) для случаев, когда может не возвращаться тот же список групп, который был установлен вызовом setgroups().292293#### `os.setpgrp()`294295Вызывает системный вызов `setpgrp()` или `setpgrp(0, 0)` в зависимости от того, какая версия реализована (если таковая имеется). За семантикой обращайтесь к руководству Unix.296297Доступность: Unix.298299#### `os.setpgid(pid, pgrp)`300301Вызывает системный вызов `setpgid()`, чтобы установить идентификатор группы процессов процесса с идентификатором *pid* равным группе процессов с идентификатором *pgrp*. За семантикой обращайтесь к руководству Unix.302303Доступность: Unix.304305#### `os.setpriority(which, who, priority)`306307Устанавливает приоритет планирования программы. Значение *which* – одно из [`PRIO_PROCESS`](https://python-all.ru/3.5/library/os.html#os.PRIO_PROCESS), [`PRIO_PGRP`](https://python-all.ru/3.5/library/os.html#os.PRIO_PGRP) или [`PRIO_USER`](https://python-all.ru/3.5/library/os.html#os.PRIO_USER), а *who* интерпретируется относительно *which* (идентификатор процесса для [`PRIO_PROCESS`](https://python-all.ru/3.5/library/os.html#os.PRIO_PROCESS), идентификатор группы процессов для [`PRIO_PGRP`](https://python-all.ru/3.5/library/os.html#os.PRIO_PGRP) и идентификатор пользователя для [`PRIO_USER`](https://python-all.ru/3.5/library/os.html#os.PRIO_USER)). Нулевое значение для *who* обозначает (соответственно): вызывающий процесс, группу процессов вызывающего процесса или реальный идентификатор пользователя вызывающего процесса. *priority* – значение в диапазоне от -20 до 19. Приоритет по умолчанию – 0; меньшие значения приоритета приводят к более благоприятному планированию.308309Доступность: Unix310311Новое в версии 3.3.312313#### `os.setregid(rgid, egid)`314315Устанавливает реальный и эффективный идентификаторы группы текущего процесса.316317Доступность: Unix.318319#### `os.setresgid(rgid, egid, sgid)`320321Устанавливает реальный, эффективный и сохранённый идентификаторы группы текущего процесса.322323Доступность: Unix.324325Новое в версии 3.2.326327#### `os.setresuid(ruid, euid, suid)`328329Устанавливает реальный, эффективный и сохранённый идентификаторы пользователя текущего процесса.330331Доступность: Unix.332333Новое в версии 3.2.334335#### `os.setreuid(ruid, euid)`336337Устанавливает реальный и эффективный идентификаторы пользователя текущего процесса.338339Доступность: Unix.340341#### `os.getsid(pid)`342343Вызывает системный вызов `getsid()`. За семантикой обращайтесь к руководству Unix.344345Доступность: Unix.346347#### `os.setsid()`348349Вызывает системный вызов `setsid()`. За семантикой обращайтесь к руководству Unix.350351Доступность: Unix.352353#### `os.setuid(uid)`354355Устанавливает идентификатор пользователя текущего процесса.356357Доступность: Unix.358359#### `os.strerror(code)`360361Возвращает сообщение об ошибке, соответствующее коду ошибки в *code*. На платформах, где `strerror()` возвращает `NULL` при неизвестном номере ошибки, возбуждается [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError).362363#### `os.supports_bytes_environ`364365`True` если нативный тип ОС окружения – bytes (например, `False` на Windows).366367Новое в версии 3.2.368369#### `os.umask(mask)`370371Устанавливает текущую числовую umask и возвращает предыдущую umask.372373#### `os.uname()`374375Возвращает информацию, идентифицирующую текущую операционную систему. Возвращаемое значение – объект с пятью атрибутами:376377- `sysname` – имя операционной системы378- `nodename` – имя машины в сети (определяется реализацией)379- `release` – выпуск операционной системы380- `version` – версия операционной системы381- `machine` – идентификатор оборудования382383Для обратной совместимости этот объект также является итерируемым и ведёт себя как кортеж из пяти элементов, содержащий `sysname`, `nodename`, `release`, `version` и `machine` в указанном порядке.384385Некоторые системы усекают `nodename` до 8 символов или до первой компоненты; лучший способ получить имя хоста – это [`socket.gethostname()`](https://python-all.ru/3.5/library/socket.html#socket.gethostname) или даже `socket.gethostbyaddr(socket.gethostname())`.386387Доступность: современные версии Unix.388389Изменено в версии 3.3: Тип возвращаемого значения изменён с кортежа на кортежеподобный объект с именованными атрибутами.390391#### `os.unsetenv(key)`392393Удаляет (сбрасывает) переменную окружения с именем *key*. Такие изменения окружения влияют на подпроцессы, запущенные с помощью [`os.system()`](https://python-all.ru/3.5/library/os.html#os.system), [`popen()`](https://python-all.ru/3.5/library/os.html#os.popen) или [`fork()`](https://python-all.ru/3.5/library/os.html#os.fork) и [`execv()`](https://python-all.ru/3.5/library/os.html#os.execv).394395Когда поддерживается [`unsetenv()`](https://python-all.ru/3.5/library/os.html#os.unsetenv), удаление элементов из `os.environ` автоматически преобразуется в соответствующий вызов [`unsetenv()`](https://python-all.ru/3.5/library/os.html#os.unsetenv); однако вызовы [`unsetenv()`](https://python-all.ru/3.5/library/os.html#os.unsetenv) не обновляют `os.environ`, поэтому на самом деле предпочтительнее удалять элементы из `os.environ`.396397Доступность: большинство разновидностей Unix, Windows.398399## 16.1.3. Создание файлового объекта400401Эта функция создает новые [файловые объекты](https://python-all.ru/3.5/glossary.html#term-file-object). (См. также [`open()`](https://python-all.ru/3.5/library/os.html#os.open) для открытия файловых дескрипторов.)402403#### `os.fdopen(fd, *args, **kwargs)`404405Возвращает открытый файловый объект, подключённый к файловому дескриптору *fd*. Это псевдоним встроенной функции [`open()`](https://python-all.ru/3.5/library/functions.html#open) и принимает те же аргументы. Единственное отличие в том, что первый аргумент [`fdopen()`](https://python-all.ru/3.5/library/os.html#os.fdopen) всегда должен быть целым числом.406407## 16.1.4. Операции с файловыми дескрипторами408409Эти функции работают с потоками ввода-вывода, на которые ссылаются файловые дескрипторы.410411Файловые дескрипторы – это небольшие целые числа, соответствующие файлу, который был открыт текущим процессом. Например, стандартный ввод обычно имеет файловый дескриптор 0, стандартный вывод – 1, а стандартный вывод ошибок – 2. Последующие файлы, открываемые процессом, получают номера 3, 4, 5 и так далее. Название «файловый дескриптор» слегка обманчиво; на платформах Unix сокеты и каналы также обозначаются файловыми дескрипторами.412413Метод [`fileno()`](https://python-all.ru/3.5/library/io.html#io.IOBase.fileno) можно использовать для получения файлового дескриптора, связанного с [файловым объектом](https://python-all.ru/3.5/glossary.html#term-file-object) при необходимости. Обратите внимание, что прямое использование файлового дескриптора обходит методы файлового объекта, игнорируя такие аспекты, как внутренняя буферизация данных.414415#### `os.close(fd)`416417Закрывает файловый дескриптор *fd*.418419> **Примечание**420>421> Эта функция предназначена для низкоуровневого ввода-вывода и должна применяться к файловому дескриптору, возвращённому [`os.open()`](https://python-all.ru/3.5/library/os.html#os.open) или [`pipe()`](https://python-all.ru/3.5/library/os.html#os.pipe). Чтобы закрыть «файловый объект», возвращённый встроенной функцией [`open()`](https://python-all.ru/3.5/library/functions.html#open) или [`popen()`](https://python-all.ru/3.5/library/os.html#os.popen) или [`fdopen()`](https://python-all.ru/3.5/library/os.html#os.fdopen), используйте его метод [`close()`](https://python-all.ru/3.5/library/io.html#io.IOBase.close).422423#### `os.closerange(fd_low, fd_high)`424425Закрывает все файловые дескрипторы от *fd\_low* (включительно) до *fd\_high* (не включая), игнорируя ошибки. Эквивалентно (но гораздо быстрее):426427```python428for fd in range(fd_low, fd_high):429    try:430        os.close(fd)431    except OSError:432        pass433```434435#### `os.device_encoding(fd)`436437Возвращает строку, описывающую кодировку устройства, связанного с *fd*, если оно подключено к терминалу; иначе возвращает [`None`](https://python-all.ru/3.5/library/constants.html#None).438439#### `os.dup(fd)`440441Возвращает дубликат файлового дескриптора *fd*. Новый файловый дескриптор является [ненаследуемым](https://python-all.ru/3.5/library/os.html#fd-inheritance).442443В Windows при дублировании стандартного потока (0: stdin, 1: stdout, 2: stderr) новый файловый дескриптор является [наследуемым](https://python-all.ru/3.5/library/os.html#fd-inheritance).444445Изменено в версии 3.4: Новый файловый дескриптор теперь не наследуется.446447#### `os.dup2(fd, fd2, inheritable=True)`448449Дублирует файловый дескриптор *fd* в *fd2*, при необходимости предварительно закрывая последний. Файловый дескриптор *fd2* по умолчанию [inheritable](https://python-all.ru/3.5/library/os.html#fd-inheritance), или не наследуемый, если *inheritable* равно `False`.450451Изменено в версии 3.4: Добавлен необязательный параметр *inheritable*.452453#### `os.fchmod(fd, mode)`454455Изменяет режим файла, заданного *fd*, на числовой *mode*. См. документацию [`chmod()`](https://python-all.ru/3.5/library/os.html#os.chmod) для возможных значений *mode*. Начиная с Python 3.3, это эквивалентно `os.chmod(fd, mode)`.456457Доступность: Unix.458459#### `os.fchown(fd, uid, gid)`460461Изменяет идентификаторы владельца и группы файла, заданного *fd*, на числовые *uid* и *gid*. Чтобы оставить один из идентификаторов без изменений, установите его в -1. См. [`chown()`](https://python-all.ru/3.5/library/os.html#os.chown). Начиная с Python 3.3, это эквивалентно `os.chown(fd, uid, gid)`.462463Доступность: Unix.464465#### `os.fdatasync(fd)`466467Принудительная запись файла с файловым дескриптором *fd* на диск. Не принуждает к обновлению метаданных.468469Доступность: Unix.470471> **Примечание**472>473> Эта функция недоступна в MacOS.474475#### `os.fpathconf(fd, name)`476477Возвращает информацию о системной конфигурации, относящуюся к открытому файлу. *name* задаёт значение конфигурации для получения; это может быть строка, являющаяся именем определённого системного значения; эти имена указаны в ряде стандартов (POSIX.1, Unix 95, Unix 98 и другие). Некоторые платформы определяют дополнительные имена. Имена, известные операционной системе хоста, приведены в словаре `pathconf_names`. Для переменных конфигурации, не включённых в это отображение, также принимается передача целого числа для *name*.478479Если *name* – строка и не известна, возбуждается исключение [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError). Если конкретное значение для *name* не поддерживается хост-системой, даже если оно присутствует в `pathconf_names`, возбуждается исключение [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError) с [`errno.EINVAL`](https://python-all.ru/3.5/library/errno.html#errno.EINVAL) в качестве кода ошибки.480481Начиная с Python 3.3, это эквивалентно `os.pathconf(fd, name)`.482483Доступность: Unix.484485#### `os.fstat(fd)`486487Получить статус файлового дескриптора *fd*. Возвращает объект [`stat_result`](https://python-all.ru/3.5/library/os.html#os.stat_result).488489Начиная с Python 3.3, это эквивалентно `os.stat(fd)`.490491> **См. также**492>493> Функция [`stat()`](https://python-all.ru/3.5/library/os.html#os.stat).494495#### `os.fstatvfs(fd)`496497Возвращает информацию о файловой системе, содержащей файл, связанный с файловым дескриптором *fd*, как [`statvfs()`](https://python-all.ru/3.5/library/os.html#os.statvfs). Начиная с Python 3.3, это eквивалентно `os.statvfs(fd)`.498499Доступность: Unix.500501#### `os.fsync(fd)`502503Принудительно записывает файл с файловым дескриптором *fd* на диск. В Unix вызывает нативную функцию `fsync()`; в Windows – функцию MS `_commit()`.504505Если работа ведётся с буферизованным файловым объектом Python [file object](https://python-all.ru/3.5/glossary.html#term-file-object) *f*, сначала следует выполнить `f.flush()`, а затем `os.fsync(f.fileno())`, чтобы гарантировать запись на диск всех внутренних буферов, связанных с *f*.506507Доступность: Unix, Windows.508509#### `os.ftruncate(fd, length)`510511Обрезает файл, соответствующий файловому дескриптору *fd*, так, чтобы его размер не превышал *length* байт. Начиная с Python 3.3, это эквивалентно `os.truncate(fd, length)`.512513Доступность: Unix, Windows.514515Изменено в версии 3.5: Добавлена поддержка Windows516517#### `os.get_blocking(fd)`518519Возвращает блокирующий режим файлового дескриптора: `False`, если установлен флаг [`O_NONBLOCK`](https://python-all.ru/3.5/library/os.html#os.O_NONBLOCK), и `True`, если флаг сброшен.520521См. также [`set_blocking()`](https://python-all.ru/3.5/library/os.html#os.set_blocking) и [`socket.socket.setblocking()`](https://python-all.ru/3.5/library/socket.html#socket.socket.setblocking).522523Доступность: Unix.524525Новое в версии 3.5.526527#### `os.isatty(fd)`528529Возвращает `True`, если файловый дескриптор *fd* открыт и подключён к устройству типа tty, иначе `False`.530531#### `os.lockf(fd, cmd, len)`532533Применяет, проверяет или удаляет POSIX-блокировку на открытом файловом дескрипторе. *fd* – открытый файловый дескриптор. *cmd* задаёт команду: одну из [`F_LOCK`](https://python-all.ru/3.5/library/os.html#os.F_LOCK), [`F_TLOCK`](https://python-all.ru/3.5/library/os.html#os.F_TLOCK), [`F_ULOCK`](https://python-all.ru/3.5/library/os.html#os.F_ULOCK) или [`F_TEST`](https://python-all.ru/3.5/library/os.html#os.F_TEST). *len* задаёт участок файла для блокировки.534535Доступность: Unix.536537Новое в версии 3.3.538539#### `os.F_LOCK`540541#### `os.F_TLOCK`542543#### `os.F_ULOCK`544545#### `os.F_TEST`546547Флаги, указывающие, какое действие выполнит [`lockf()`](https://python-all.ru/3.5/library/os.html#os.lockf).548549Доступность: Unix.550551Новое в версии 3.3.552553#### `os.lseek(fd, pos, how)`554555Устанавливает текущую позицию файлового дескриптора *fd* в позицию *pos*, с заданным параметром *how*: [`SEEK_SET`](https://python-all.ru/3.5/library/os.html#os.SEEK_SET) или `0` – установить позицию относительно начала файла; [`SEEK_CUR`](https://python-all.ru/3.5/library/os.html#os.SEEK_CUR) или `1` – относительно текущей позиции; [`SEEK_END`](https://python-all.ru/3.5/library/os.html#os.SEEK_END) или `2` – относительно конца файла. Возвращает новую позицию курсора в байтах от начала.556557#### `os.SEEK_SET`558559#### `os.SEEK_CUR`560561#### `os.SEEK_END`562563Параметры функции [`lseek()`](https://python-all.ru/3.5/library/os.html#os.lseek). Их значения – 0, 1 и 2 соответственно.564565Новое в версии 3.3: Некоторые операционные системы могут поддерживать дополнительные значения, такие как `os.SEEK_HOLE` или `os.SEEK_DATA`.566567#### `os.open(path, flags, mode=0o777, *, dir_fd=None)`568569Открывает файл *path* и устанавливает различные флаги в соответствии с *flags* и, возможно, его режим в соответствии с *mode*. При вычислении *mode* текущее значение umask сначала маскируется. Возвращает файловый дескриптор для вновь открытого файла. Новый файловый дескриптор [не наследуется](https://python-all.ru/3.5/library/os.html#fd-inheritance).570571Описание значений флагов и режимов см. в документации библиотеки времени выполнения C; константы флагов (например, [`O_RDONLY`](https://python-all.ru/3.5/library/os.html#os.O_RDONLY) и [`O_WRONLY`](https://python-all.ru/3.5/library/os.html#os.O_WRONLY)) определены в модуле [`os`](https://python-all.ru/3.5/library/os.html#module-os). В частности, в Windows необходимо добавить [`O_BINARY`](https://python-all.ru/3.5/library/os.html#os.O_BINARY) для открытия файлов в двоичном режиме.572573Эта функция поддерживает [пути относительно файловых дескрипторов каталогов](https://python-all.ru/3.5/library/os.html#dir-fd) с помощью параметра *dir\_fd*.574575Изменено в версии 3.4: Новый файловый дескриптор теперь не наследуется.576577> **Примечание**578>579> Эта функция предназначена для низкоуровневого ввода-вывода. Для обычного использования используйте встроенную функцию [`open()`](https://python-all.ru/3.5/library/functions.html#open), которая возвращает [файловый объект](https://python-all.ru/3.5/glossary.html#term-file-object) с методами `read()` и `write()` (и многими другими). Чтобы обернуть файловый дескриптор в файловый объект, используйте [`fdopen()`](https://python-all.ru/3.5/library/os.html#os.fdopen).580581Новое в версии 3.3: Аргумент *dir\_fd*.582583Изменено в версии 3.5: Если системный вызов был прерван и обработчик сигнала не возбуждает исключение, функция теперь повторяет системный вызов вместо возбуждения исключения [`InterruptedError`](https://python-all.ru/3.5/library/exceptions.html#InterruptedError) (см. [**PEP 475**](https://python-all.ru/3.5/library/os.html) для обоснования).584585Следующие константы являются возможными значениями параметра *flags* функции [`open()`](https://python-all.ru/3.5/library/os.html#os.open). Их можно комбинировать с помощью побитового оператора OR `|`. Некоторые из них доступны не на всех платформах. Описания их доступности и использования см. на странице руководства *open(2)* в Unix или в [MSDN](https://python-all.ru/3.5/library/os.html) в Windows.586587#### `os.O_RDONLY`588589#### `os.O_WRONLY`590591#### `os.O_RDWR`592593#### `os.O_APPEND`594595#### `os.O_CREAT`596597#### `os.O_EXCL`598599#### `os.O_TRUNC`600601Приведённые выше константы доступны в Unix и Windows.602603#### `os.O_DSYNC`604605#### `os.O_RSYNC`606607#### `os.O_SYNC`608609#### `os.O_NDELAY`610611#### `os.O_NONBLOCK`612613#### `os.O_NOCTTY`614615#### `os.O_CLOEXEC`616617Приведённые выше константы доступны только в Unix.618619Изменено в версии 3.3: добавлена константа [`O_CLOEXEC`](https://python-all.ru/3.5/library/os.html#os.O_CLOEXEC).620621#### `os.O_BINARY`622623#### `os.O_NOINHERIT`624625#### `os.O_SHORT_LIVED`626627#### `os.O_TEMPORARY`628629#### `os.O_RANDOM`630631#### `os.O_SEQUENTIAL`632633#### `os.O_TEXT`634635Приведённые выше константы доступны только в Windows.636637#### `os.O_ASYNC`638639#### `os.O_DIRECT`640641#### `os.O_DIRECTORY`642643#### `os.O_NOFOLLOW`644645#### `os.O_NOATIME`646647#### `os.O_PATH`648649#### `os.O_TMPFILE`650651#### `os.O_SHLOCK`652653#### `os.O_EXLOCK`654655Вышеуказанные константы являются расширениями и отсутствуют, если не определены библиотекой C.656657Изменено в версии 3.4: Добавлена [`O_PATH`](https://python-all.ru/3.5/library/os.html#os.O_PATH) в системах, которые её поддерживают. Добавлена [`O_TMPFILE`](https://python-all.ru/3.5/library/os.html#os.O_TMPFILE), доступна только на Linux Kernel 3.11 или новее.658659#### `os.openpty()`660661Открывает новую пару псевдотерминалов. Возвращает пару файловых дескрипторов `(master, slave)` для pty и tty соответственно. Новые файловые дескрипторы являются [ненаследуемыми](https://python-all.ru/3.5/library/os.html#fd-inheritance). Для (чуть более) переносимого подхода используйте модуль [`pty`](https://python-all.ru/3.5/library/pty.html#module-pty).662663Доступность: некоторые разновидности Unix.664665Изменено в версии 3.4: Новые файловые дескрипторы теперь являются ненаследуемыми.666667#### `os.pipe()`668669Создаёт канал. Возвращает пару файловых дескрипторов `(r, w)`, пригодных для чтения и записи соответственно. Новый файловый дескриптор является [ненаследуемым](https://python-all.ru/3.5/library/os.html#fd-inheritance).670671Доступность: Unix, Windows.672673Изменено в версии 3.4: Новые файловые дескрипторы теперь являются ненаследуемыми.674675#### `os.pipe2(flags)`676677Создаёт канал с атомарной установкой *flags*. *flags* можно составить с помощью логического ИЛИ одной или нескольких из этих констант: [`O_NONBLOCK`](https://python-all.ru/3.5/library/os.html#os.O_NONBLOCK), [`O_CLOEXEC`](https://python-all.ru/3.5/library/os.html#os.O_CLOEXEC). Возвращает пару файловых дескрипторов `(r, w)`, пригодных для чтения и записи соответственно.678679Доступность: некоторые разновидности Unix.680681Новое в версии 3.3.682683#### `os.posix_fallocate(fd, offset, len)`684685Гарантирует, что для файла, указанного в *fd*, выделено достаточно дискового пространства, начиная с *offset* и продолжаясь на *len* байтов.686687Доступность: Unix.688689Новое в версии 3.3.690691#### `os.posix_fadvise(fd, offset, len, advice)`692693Объявляет о намерении получить доступ к данным по определённому шаблону, что позволяет ядру выполнять оптимизации. Совет применяется к области файла, указанной в *fd*, начиная с *offset* и продолжаясь на *len* байтов. *advice* может быть одним из [`POSIX_FADV_NORMAL`](https://python-all.ru/3.5/library/os.html#os.POSIX_FADV_NORMAL), [`POSIX_FADV_SEQUENTIAL`](https://python-all.ru/3.5/library/os.html#os.POSIX_FADV_SEQUENTIAL), [`POSIX_FADV_RANDOM`](https://python-all.ru/3.5/library/os.html#os.POSIX_FADV_RANDOM), [`POSIX_FADV_NOREUSE`](https://python-all.ru/3.5/library/os.html#os.POSIX_FADV_NOREUSE), [`POSIX_FADV_WILLNEED`](https://python-all.ru/3.5/library/os.html#os.POSIX_FADV_WILLNEED) или [`POSIX_FADV_DONTNEED`](https://python-all.ru/3.5/library/os.html#os.POSIX_FADV_DONTNEED).694695Доступность: Unix.696697Новое в версии 3.3.698699#### `os.POSIX_FADV_NORMAL`700701#### `os.POSIX_FADV_SEQUENTIAL`702703#### `os.POSIX_FADV_RANDOM`704705#### `os.POSIX_FADV_NOREUSE`706707#### `os.POSIX_FADV_WILLNEED`708709#### `os.POSIX_FADV_DONTNEED`710711Флаги, которые можно использовать в *advice* в [`posix_fadvise()`](https://python-all.ru/3.5/library/os.html#os.posix_fadvise), указывающие шаблон доступа, который, вероятно, будет использоваться.712713Доступность: Unix.714715Новое в версии 3.3.716717#### `os.pread(fd, buffersize, offset)`718719Чтение из файлового дескриптора *fd* начиная с позиции *offset*. Будет прочитано до *buffersize* байт. Смещение в файле остаётся неизменным.720721Доступность: Unix.722723Новое в версии 3.3.724725#### `os.pwrite(fd, str, offset)`726727Запись *bytestring* в файловый дескриптор *fd*, начиная с *offset*, оставляя смещение в файле неизменным.728729Доступность: Unix.730731Новое в версии 3.3.732733#### `os.read(fd, n)`734735Читает не более *n* байт из файлового дескриптора *fd*. Возвращает объект bytes, содержащий прочитанные байты. Если достигнут конец файла, на который ссылается *fd*, возвращается пустой объект bytes.736737> **Примечание**738>739> Эта функция предназначена для низкоуровневого ввода-вывода и должна применяться к файловому дескриптору, возвращаемому [`os.open()`](https://python-all.ru/3.5/library/os.html#os.open) или [`pipe()`](https://python-all.ru/3.5/library/os.html#os.pipe). Чтобы прочитать «файловый объект», возвращаемый встроенной функцией [`open()`](https://python-all.ru/3.5/library/functions.html#open) или [`popen()`](https://python-all.ru/3.5/library/os.html#os.popen) или [`fdopen()`](https://python-all.ru/3.5/library/os.html#os.fdopen), или [`sys.stdin`](https://python-all.ru/3.5/library/sys.html#sys.stdin), используйте его методы `read()` или `readline()`.740741Изменено в версии 3.5: Если системный вызов был прерван и обработчик сигнала не возбуждает исключение, функция теперь повторяет системный вызов вместо возбуждения исключения [`InterruptedError`](https://python-all.ru/3.5/library/exceptions.html#InterruptedError) (см. [**PEP 475**](https://python-all.ru/3.5/library/os.html) для обоснования).742743#### `os.sendfile(out, in, offset, count)`744745#### `os.sendfile(out, in, offset, count, [headers, ][trailers, ]flags=0)`746747Копирует *count* байт из файлового дескриптора *in* в файловый дескриптор *out*, начиная с *offset*. Возвращает количество отправленных байт. При достижении EOF возвращает 0.748749Первая форма записи функции поддерживается на всех платформах, которые определяют [`sendfile()`](https://python-all.ru/3.5/library/os.html#os.sendfile).750751В Linux, если *offset* задан как `None`, байты читаются из текущей позиции *in*, а позиция *in* обновляется.752753Второй случай может использоваться в Mac OS X и FreeBSD, где *headers* и *trailers* являются произвольными последовательностями буферов, которые записываются до и после записи данных из *in*. Возвращаемое значение такое же, как в первом случае.754755В Mac OS X и FreeBSD значение 0 для *count* указывает, что отправка продолжается до достижения конца *in*.756757Все платформы поддерживают сокеты в качестве файлового дескриптора *out*, а некоторые платформы также допускают другие типы (например, обычный файл, канал).758759Кроссплатформенным приложениям не следует использовать аргументы *headers*, *trailers* и *flags*.760761Доступность: Unix.762763> **Примечание**764>765> Для высокоуровневой обёртки над [`sendfile()`](https://python-all.ru/3.5/library/os.html#os.sendfile) см. [`socket.socket.sendfile()`](https://python-all.ru/3.5/library/socket.html#socket.socket.sendfile).766767Новое в версии 3.3.768769#### `os.set_blocking(fd, blocking)`770771Устанавливает режим блокировки для указанного файлового дескриптора. Устанавливает флаг [`O_NONBLOCK`](https://python-all.ru/3.5/library/os.html#os.O_NONBLOCK), если блокировка `False`, и сбрасывает флаг в противном случае.772773См. также [`get_blocking()`](https://python-all.ru/3.5/library/os.html#os.get_blocking) и [`socket.socket.setblocking()`](https://python-all.ru/3.5/library/socket.html#socket.socket.setblocking).774775Доступность: Unix.776777Новое в версии 3.5.778779#### `os.SF_NODISKIO`780781#### `os.SF_MNOWAIT`782783#### `os.SF_SYNC`784785Параметры функции [`sendfile()`](https://python-all.ru/3.5/library/os.html#os.sendfile), если реализация их поддерживает.786787Доступность: Unix.788789Новое в версии 3.3.790791#### `os.readv(fd, buffers)`792793Читает данные из файлового дескриптора *fd* в несколько изменяемых [объектов, подобных bytes](https://python-all.ru/3.5/glossary.html#term-bytes-like-object) *buffers*. [`readv()`](https://python-all.ru/3.5/library/os.html#os.readv) передаёт данные в каждый буфер, пока он не заполнится, затем переходит к следующему буферу в последовательности для размещения остатка данных. [`readv()`](https://python-all.ru/3.5/library/os.html#os.readv) возвращает общее количество прочитанных байт (оно может быть меньше общей ёмкости всех объектов).794795Доступность: Unix.796797Новое в версии 3.3.798799#### `os.tcgetpgrp(fd)`800801Возвращает группу процессов, связанную с терминалом, заданным *fd* (открытый файловый дескриптор, возвращаемый [`os.open()`](https://python-all.ru/3.5/library/os.html#os.open)).802803Доступность: Unix.804805#### `os.tcsetpgrp(fd, pg)`806807Устанавливает группу процессов, связанную с терминалом, заданным *fd* (открытый файловый дескриптор, возвращаемый [`os.open()`](https://python-all.ru/3.5/library/os.html#os.open)), в *pg*.808809Доступность: Unix.810811#### `os.ttyname(fd)`812813Возвращает строку, которая идентифицирует терминальное устройство, связанное с файловым дескриптором *fd*. Если *fd* не связан с терминальным устройством, возбуждается исключение.814815Доступность: Unix.816817#### `os.write(fd, str)`818819Записывает объект bytes из *str* в файловый дескриптор *fd*. Возвращает количество фактически записанных байт.820821> **Примечание**822>823> Эта функция предназначена для низкоуровневого ввода-вывода и должна применяться к файловому дескриптору, возвращённому [`os.open()`](https://python-all.ru/3.5/library/os.html#os.open) или [`pipe()`](https://python-all.ru/3.5/library/os.html#os.pipe). Чтобы записать «файловый объект», возвращённый встроенной функцией [`open()`](https://python-all.ru/3.5/library/functions.html#open) или [`popen()`](https://python-all.ru/3.5/library/os.html#os.popen), или [`fdopen()`](https://python-all.ru/3.5/library/os.html#os.fdopen), или [`sys.stdout`](https://python-all.ru/3.5/library/sys.html#sys.stdout), или [`sys.stderr`](https://python-all.ru/3.5/library/sys.html#sys.stderr), используйте его метод `write()`.824825Изменено в версии 3.5: Если системный вызов был прерван и обработчик сигнала не возбуждает исключение, функция теперь повторяет системный вызов вместо возбуждения исключения [`InterruptedError`](https://python-all.ru/3.5/library/exceptions.html#InterruptedError) (см. [**PEP 475**](https://python-all.ru/3.5/library/os.html) для обоснования).826827#### `os.writev(fd, buffers)`828829Записывает содержимое *buffers* в файловый дескриптор *fd*. *buffers* должна быть последовательностью [объектов, подобных bytes](https://python-all.ru/3.5/glossary.html#term-bytes-like-object). Буферы обрабатываются в порядке массива. Сначала записывается всё содержимое первого буфера, затем второго и так далее. Операционная система может установить ограничение (значение sysconf() SC\_IOV\_MAX) на количество используемых буферов.830831[`writev()`](https://python-all.ru/3.5/library/os.html#os.writev) записывает содержимое каждого объекта в файловый дескриптор и возвращает общее количество записанных байт.832833Доступность: Unix.834835Новое в версии 3.3.836837### 16.1.4.1. Определение размера терминала838839Новое в версии 3.3.840841#### `os.get_terminal_size(fd=STDOUT_FILENO)`842843Возвращает размер окна терминала в виде `(columns, lines)`, кортежа типа [`terminal_size`](https://python-all.ru/3.5/library/os.html#os.terminal_size).844845Необязательный аргумент `fd` (по умолчанию `STDOUT_FILENO`, или стандартный вывод) указывает, какой файловый дескриптор следует опросить.846847Если файловый дескриптор не подключён к терминалу, возбуждается [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError).848849[`shutil.get_terminal_size()`](https://python-all.ru/3.5/library/shutil.html#shutil.get_terminal_size) – это высокоуровневая функция, которую следует использовать обычно; `os.get_terminal_size` – это низкоуровневая реализация.850851Доступность: Unix, Windows.852853#### `class os.terminal_size`854855Подкласс кортежа, содержащий `(columns, lines)` окна терминала.856857#### `columns`858859Ширина окна терминала в символах.860861#### `lines`862863Высота окна терминала в символах.864865### 16.1.4.2. Наследование файловых дескрипторов866867Новое в версии 3.4.868869Файловый дескриптор имеет флаг «наследуемости», который указывает, может ли файловый дескриптор наследоваться дочерними процессами. Начиная с Python 3.4, файловые дескрипторы, создаваемые Python, по умолчанию ненаследуемые.870871В UNIX ненаследуемые файловые дескрипторы закрываются в дочерних процессах при запуске новой программы; остальные дескрипторы наследуются.872873В Windows ненаследуемые дескрипторы и файловые дескрипторы закрываются в дочерних процессах, за исключением стандартных потоков (файловые дескрипторы 0, 1 и 2: stdin, stdout и stderr), которые всегда наследуются. При использовании функций [`spawn*`](https://python-all.ru/3.5/library/os.html#os.spawnl) наследуются все наследуемые дескрипторы и все наследуемые файловые дескрипторы. При использовании модуля [`subprocess`](https://python-all.ru/3.5/library/subprocess.html#module-subprocess) все файловые дескрипторы, кроме стандартных потоков, закрываются, а наследуемые дескрипторы наследуются только в том случае, если параметр *close\_fds* имеет значение `False`.874875#### `os.get_inheritable(fd)`876877Получает флаг «наследуемости» указанного файлового дескриптора (логическое значение).878879#### `os.set_inheritable(fd, inheritable)`880881Устанавливает флаг наследуемости для указанного файлового дескриптора.882883#### `os.get_handle_inheritable(handle)`884885Возвращает флаг наследуемости для указанного дескриптора (булево значение).886887Доступность: Windows.888889#### `os.set_handle_inheritable(handle, inheritable)`890891Устанавливает флаг наследуемости для указанного дескриптора.892893Доступность: Windows.894895## 16.1.5. Файлы и каталоги896897На некоторых платформах Unix многие из этих функций поддерживают одну или несколько из следующих возможностей:898899- **Указание файлового дескриптора:** Для некоторых функций аргумент *path* может быть не только строкой с именем пути, но и файловым дескриптором. В этом случае функция будет работать с файлом, на который ссылается дескриптор. (В системах POSIX Python вызовет версию функции `f...`.)900901  Вы можете проверить, можно ли указать *path* в качестве файлового дескриптора на вашей платформе, с помощью [`os.supports_fd`](https://python-all.ru/3.5/library/os.html#os.supports_fd). Если такой возможности нет, её использование вызовет [`NotImplementedError`](https://python-all.ru/3.5/library/exceptions.html#NotImplementedError).902903  Если функция также поддерживает аргументы *dir\_fd* или *follow\_symlinks*, то указывать их вместе с *path* в виде файлового дескриптора – ошибка.904905- **Пути относительно дескрипторов каталогов:** Если *dir\_fd* не равен `None`, это должен быть файловый дескриптор, ссылающийся на каталог, и путь для операции должен быть относительным; тогда путь будет считаться относительно этого каталога. Если путь абсолютный, *dir\_fd* игнорируется. (В системах POSIX Python вызовет версию функции `...at` или `f...at`.)906907  Вы можете проверить, поддерживается ли *dir\_fd* на вашей платформе, с помощью [`os.supports_dir_fd`](https://python-all.ru/3.5/library/os.html#os.supports_dir_fd). Если эта возможность недоступна, её использование вызовет [`NotImplementedError`](https://python-all.ru/3.5/library/exceptions.html#NotImplementedError).908909- **Не следовать символьным ссылкам:** Если *follow\_symlinks* равен `False`, и последний элемент пути для операции является символьной ссылкой, функция будет работать с самой символьной ссылкой, а не с файлом, на который она указывает. (В системах POSIX Python вызовет версию функции `l...`.)910911  Вы можете проверить, поддерживается ли *follow\_symlinks* на вашей платформе, с помощью [`os.supports_follow_symlinks`](https://python-all.ru/3.5/library/os.html#os.supports_follow_symlinks). Если эта возможность недоступна, её использование вызовет [`NotImplementedError`](https://python-all.ru/3.5/library/exceptions.html#NotImplementedError).912913#### `os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)`914915Использует реальные uid/gid для проверки доступа к *path*. Обратите внимание, что большинство операций используют эффективные uid/gid, поэтому эта функция может применяться в среде suid/sgid для проверки, имеет ли вызывающий пользователь указанный доступ к *path*. *mode* должен быть [`F_OK`](https://python-all.ru/3.5/library/os.html#os.F_OK) для проверки существования *path*, или может быть логическим ИЛИ одного или нескольких из [`R_OK`](https://python-all.ru/3.5/library/os.html#os.R_OK), [`W_OK`](https://python-all.ru/3.5/library/os.html#os.W_OK) и [`X_OK`](https://python-all.ru/3.5/library/os.html#os.X_OK) для проверки прав. Возвращает [`True`](https://python-all.ru/3.5/library/constants.html#True), если доступ разрешён, [`False`](https://python-all.ru/3.5/library/constants.html#False) – если нет. См. man-страницу Unix *access(2)* для получения дополнительной информации.916917Эта функция поддерживает [указание путей относительно дескрипторов каталогов](https://python-all.ru/3.5/library/os.html#dir-fd) и [отказ от следования по символьным ссылкам](https://python-all.ru/3.5/library/os.html#follow-symlinks).918919Если *effective\_ids* равно `True`, [`access()`](https://python-all.ru/3.5/library/os.html#os.access) будет выполнять проверки доступа, используя эффективные UID/GID вместо реальных UID/GID. Параметр *effective\_ids* может не поддерживаться на вашей платформе; проверить, доступен ли он, можно с помощью [`os.supports_effective_ids`](https://python-all.ru/3.5/library/os.html#os.supports_effective_ids). Если он недоступен, его использование вызовет исключение [`NotImplementedError`](https://python-all.ru/3.5/library/exceptions.html#NotImplementedError).920921> **Примечание**922>923> Использование [`access()`](https://python-all.ru/3.5/library/os.html#os.access) для проверки, авторизован ли пользователь, например, на открытие файла, перед фактическим открытием с помощью [`open()`](https://python-all.ru/3.5/library/functions.html#open), создаёт брешь в безопасности, поскольку пользователь может воспользоваться коротким временным промежутком между проверкой и открытием файла для его изменения. Предпочтительнее использовать подход [EAFP](https://python-all.ru/3.5/glossary.html#term-eafp). Например:924>925> ```python926> if os.access("myfile", os.R_OK):927>     with open("myfile") as fp:928>         return fp.read()929> return "some default data"930> ```931>932> лучше написать так:933>934> ```python935> try:936>     fp = open("myfile")937> except PermissionError:938>     return "some default data"939> else:940>     with fp:941>         return fp.read()942> ```943944> **Примечание**945>946> Операции ввода-вывода могут завершиться ошибкой, даже если [`access()`](https://python-all.ru/3.5/library/os.html#os.access) указывает, что они должны выполниться успешно, особенно для операций в сетевых файловых системах, которые могут иметь семантику прав доступа, выходящую за рамки обычной POSIX-модели битов разрешений.947948Изменено в версии 3.3: Добавлены параметры *dir\_fd*, *effective\_ids* и *follow\_symlinks*.949950#### `os.F_OK`951952#### `os.R_OK`953954#### `os.W_OK`955956#### `os.X_OK`957958Значения, которые передаются в параметре *mode* функции [`access()`](https://python-all.ru/3.5/library/os.html#os.access) для проверки существования, читаемости, возможности записи и исполнения *path*, соответственно.959960#### `os.chdir(path)`961962Изменяет текущий рабочий каталог на *path*.963964Эта функция поддерживает [указание файлового дескриптора](https://python-all.ru/3.5/library/os.html#path-fd). Дескриптор должен ссылаться на открытый каталог, а не на открытый файл.965966Новое в версии 3.3: Добавлена поддержка указания *path* в качестве файлового дескриптора на некоторых платформах.967968#### `os.chflags(path, flags, *, follow_symlinks=True)`969970Устанавливает флаги *path* в числовое значение *flags*. *flags* может принимать комбинацию (побитовое ИЛИ) следующих значений (определённых в модуле [`stat`](https://python-all.ru/3.5/library/stat.html#module-stat)):971972- [`stat.UF_NODUMP`](https://python-all.ru/3.5/library/stat.html#stat.UF_NODUMP)973- [`stat.UF_IMMUTABLE`](https://python-all.ru/3.5/library/stat.html#stat.UF_IMMUTABLE)974- [`stat.UF_APPEND`](https://python-all.ru/3.5/library/stat.html#stat.UF_APPEND)975- [`stat.UF_OPAQUE`](https://python-all.ru/3.5/library/stat.html#stat.UF_OPAQUE)976- [`stat.UF_NOUNLINK`](https://python-all.ru/3.5/library/stat.html#stat.UF_NOUNLINK)977- [`stat.UF_COMPRESSED`](https://python-all.ru/3.5/library/stat.html#stat.UF_COMPRESSED)978- [`stat.UF_HIDDEN`](https://python-all.ru/3.5/library/stat.html#stat.UF_HIDDEN)979- [`stat.SF_ARCHIVED`](https://python-all.ru/3.5/library/stat.html#stat.SF_ARCHIVED)980- [`stat.SF_IMMUTABLE`](https://python-all.ru/3.5/library/stat.html#stat.SF_IMMUTABLE)981- [`stat.SF_APPEND`](https://python-all.ru/3.5/library/stat.html#stat.SF_APPEND)982- [`stat.SF_NOUNLINK`](https://python-all.ru/3.5/library/stat.html#stat.SF_NOUNLINK)983- [`stat.SF_SNAPSHOT`](https://python-all.ru/3.5/library/stat.html#stat.SF_SNAPSHOT)984985Эта функция поддерживает [отказ от следования симлинкам](https://python-all.ru/3.5/library/os.html#follow-symlinks).986987Доступность: Unix.988989Новое в версии 3.3: Аргумент *follow\_symlinks*.990991#### `os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True)`992993Изменяет режим *path* на числовое значение *mode*. *mode* может принимать одно из следующих значений (определённых в модуле [`stat`](https://python-all.ru/3.5/library/stat.html#module-stat)) или их побитовые комбинации:994995- [`stat.S_ISUID`](https://python-all.ru/3.5/library/stat.html#stat.S_ISUID)996- [`stat.S_ISGID`](https://python-all.ru/3.5/library/stat.html#stat.S_ISGID)997- [`stat.S_ENFMT`](https://python-all.ru/3.5/library/stat.html#stat.S_ENFMT)998- [`stat.S_ISVTX`](https://python-all.ru/3.5/library/stat.html#stat.S_ISVTX)999- [`stat.S_IREAD`](https://python-all.ru/3.5/library/stat.html#stat.S_IREAD)1000- [`stat.S_IWRITE`](https://python-all.ru/3.5/library/stat.html#stat.S_IWRITE)1001- [`stat.S_IEXEC`](https://python-all.ru/3.5/library/stat.html#stat.S_IEXEC)1002- [`stat.S_IRWXU`](https://python-all.ru/3.5/library/stat.html#stat.S_IRWXU)1003- [`stat.S_IRUSR`](https://python-all.ru/3.5/library/stat.html#stat.S_IRUSR)1004- [`stat.S_IWUSR`](https://python-all.ru/3.5/library/stat.html#stat.S_IWUSR)1005- [`stat.S_IXUSR`](https://python-all.ru/3.5/library/stat.html#stat.S_IXUSR)1006- [`stat.S_IRWXG`](https://python-all.ru/3.5/library/stat.html#stat.S_IRWXG)1007- [`stat.S_IRGRP`](https://python-all.ru/3.5/library/stat.html#stat.S_IRGRP)1008- [`stat.S_IWGRP`](https://python-all.ru/3.5/library/stat.html#stat.S_IWGRP)1009- [`stat.S_IXGRP`](https://python-all.ru/3.5/library/stat.html#stat.S_IXGRP)1010- [`stat.S_IRWXO`](https://python-all.ru/3.5/library/stat.html#stat.S_IRWXO)1011- [`stat.S_IROTH`](https://python-all.ru/3.5/library/stat.html#stat.S_IROTH)1012- [`stat.S_IWOTH`](https://python-all.ru/3.5/library/stat.html#stat.S_IWOTH)1013- [`stat.S_IXOTH`](https://python-all.ru/3.5/library/stat.html#stat.S_IXOTH)10141015Эта функция поддерживает [указание файлового дескриптора](https://python-all.ru/3.5/library/os.html#path-fd), [пути относительно дескрипторов каталогов](https://python-all.ru/3.5/library/os.html#dir-fd) и [не следование по символьным ссылкам](https://python-all.ru/3.5/library/os.html#follow-symlinks).10161017> **Примечание**1018>1019> Хотя Windows поддерживает [`chmod()`](https://python-all.ru/3.5/library/os.html#os.chmod), с его помощью можно установить только флаг «только для чтения» файла (через константы `stat.S_IWRITE` и `stat.S_IREAD` или соответствующее целочисленное значение). Все остальные биты игнорируются.10201021Новое в версии 3.3: добавлена возможность указывать *path* как открытый файловый дескриптор, а также аргументы *dir\_fd* и *follow\_symlinks*.10221023#### `os.chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)`10241025Изменяет идентификаторы владельца и группы *path* на числовые значения *uid* и *gid*. Чтобы оставить один из идентификаторов без изменений, установите его в -1.10261027Эта функция поддерживает [указание файлового дескриптора](https://python-all.ru/3.5/library/os.html#path-fd), [пути относительно дескрипторов каталогов](https://python-all.ru/3.5/library/os.html#dir-fd) и [не следование по символьным ссылкам](https://python-all.ru/3.5/library/os.html#follow-symlinks).10281029См. [`shutil.chown()`](https://python-all.ru/3.5/library/shutil.html#shutil.chown) – функцию более высокого уровня, которая принимает имена в дополнение к числовым идентификаторам.10301031Доступность: Unix.10321033Новое в версии 3.3: Добавлена поддержка указания открытого файлового дескриптора для *path*, а также аргументов *dir\_fd* и *follow\_symlinks*.10341035#### `os.chroot(path)`10361037Изменяет корневую директорию текущего процесса на *path*.10381039Доступность: Unix.10401041#### `os.fchdir(fd)`10421043Изменяет текущую рабочую директорию на директорию, представленную файловым дескриптором *fd*. Дескриптор должен ссылаться на открытую директорию, а не на открытый файл. Начиная с Python 3.3, это эквивалентно `os.chdir(fd)`.10441045Доступность: Unix.10461047#### `os.getcwd()`10481049Возвращает строку, представляющую текущую рабочую директорию.10501051#### `os.getcwdb()`10521053Возвращает байтовую строку, представляющую текущую рабочую директорию.10541055#### `os.lchflags(path, flags)`10561057Устанавливает флаги *path* в числовое значение *flags*, как [`chflags()`](https://python-all.ru/3.5/library/os.html#os.chflags), но не следует символическим ссылкам. Начиная с Python 3.3, это эквивалентно `os.chflags(path, flags, follow_symlinks=False)`.10581059Доступность: Unix.10601061#### `os.lchmod(path, mode)`10621063Изменяет режим *path* на числовой *mode*. Если path является символической ссылкой, это влияет на саму ссылку, а не на цель. См. документацию [`chmod()`](https://python-all.ru/3.5/library/os.html#os.chmod) для возможных значений *mode*. Начиная с Python 3.3, это эквивалентно `os.chmod(path, mode, follow_symlinks=False)`.10641065Доступность: Unix.10661067#### `os.lchown(path, uid, gid)`10681069Изменяет идентификаторы владельца и группы для *path* на числовые *uid* и *gid*. Эта функция не переходит по символическим ссылкам. Начиная с Python 3.3, это эквивалентно `os.chown(path, uid, gid, follow_symlinks=False)`.10701071Доступность: Unix.10721073#### `os.link(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True)`10741075Создаёт жёсткую ссылку, указывающую на *src*, с именем *dst*.10761077Эта функция поддерживает указание *src\_dir\_fd* и/или *dst\_dir\_fd* для задания [путей относительно дескрипторов каталогов](https://python-all.ru/3.5/library/os.html#dir-fd), а также [отказ от следования символическим ссылкам](https://python-all.ru/3.5/library/os.html#follow-symlinks).10781079Доступность: Unix, Windows.10801081Изменено в версии 3.2: Добавлена поддержка Windows.10821083Новое в версии 3.3: Добавлены аргументы *src\_dir\_fd*, *dst\_dir\_fd* и *follow\_symlinks*.10841085#### `os.listdir(path='.')`10861087Возвращает список, содержащий имена записей в каталоге, заданном параметром *path*. Список отсортирован произвольным образом и не включает специальные записи `'.'` и `'..'`, даже если они присутствуют в каталоге.10881089*path* может быть типа `str` или `bytes`. Если *path* имеет тип `bytes`, то возвращаемые имена файлов также будут типа `bytes`; во всех остальных случаях – типа `str`.10901091Эта функция также может поддерживать [указание файлового дескриптора](https://python-all.ru/3.5/library/os.html#path-fd); файловый дескриптор должен ссылаться на каталог.10921093> **Примечание**1094>1095> Для кодирования имён файлов из `str` в `bytes` используйте [`fsencode()`](https://python-all.ru/3.5/library/os.html#os.fsencode).10961097> **См. также**1098>1099> Функция [`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) возвращает записи каталога вместе с информацией об атрибутах файлов, что обеспечивает лучшую производительность для многих типичных сценариев использования.11001101Изменено в версии 3.2: Параметр *path* стал необязательным.11021103Новое в версии 3.3: добавлена поддержка указания открытого файлового дескриптора для *path*.11041105#### `os.lstat(path, *, dir_fd=None)`11061107Выполняет эквивалент системного вызова `lstat()` для указанного пути. Похоже на [`stat()`](https://python-all.ru/3.5/library/os.html#os.stat), но не переходит по символическим ссылкам. Возвращает объект [`stat_result`](https://python-all.ru/3.5/library/os.html#os.stat_result).11081109На платформах, не поддерживающих символические ссылки, это псевдоним для [`stat()`](https://python-all.ru/3.5/library/os.html#os.stat).11101111Начиная с Python 3.3, это эквивалентно `os.stat(path, dir_fd=dir_fd, follow_symlinks=False)`.11121113Эта функция также поддерживает [пути, относительные к дескрипторам каталогов](https://python-all.ru/3.5/library/os.html#dir-fd).11141115> **См. также**1116>1117> Функция [`stat()`](https://python-all.ru/3.5/library/os.html#os.stat).11181119Изменено в версии 3.2: Добавлена поддержка символических ссылок Windows 6.0 (Vista).11201121Изменено в версии 3.3: Добавлен параметр *dir\_fd*.11221123#### `os.mkdir(path, mode=0o777, *, dir_fd=None)`11241125Создаёт каталог с именем *path* и числовым режимом *mode*.11261127Если каталог уже существует, возбуждается [`FileExistsError`](https://python-all.ru/3.5/library/exceptions.html#FileExistsError).11281129На некоторых системах *mode* игнорируется. Если он используется, сначала применяется маска текущего umask. Если установлены биты, отличные от последних 9 (то есть последних 3 цифр восьмеричного представления *mode*), их значение зависит от платформы. На некоторых платформах они игнорируются, и для их установки следует явно вызвать [`chmod()`](https://python-all.ru/3.5/library/os.html#os.chmod).11301131Эта функция также поддерживает [пути, относительные к дескрипторам каталогов](https://python-all.ru/3.5/library/os.html#dir-fd).11321133Также можно создавать временные каталоги; см. функцию [`tempfile.mkdtemp()`](https://python-all.ru/3.5/library/tempfile.html#tempfile.mkdtemp) модуля [`tempfile`](https://python-all.ru/3.5/library/tempfile.html#module-tempfile).11341135Новое в версии 3.3: Аргумент *dir\_fd*.11361137#### `os.makedirs(name, mode=0o777, exist_ok=False)`11381139Функция рекурсивного создания каталогов. Похожа на [`mkdir()`](https://python-all.ru/3.5/library/os.html#os.mkdir), но создаёт все промежуточные каталоги, необходимые для размещения конечного каталога.11401141Параметр *mode* передается в [`mkdir()`](https://python-all.ru/3.5/library/os.html#os.mkdir); подробнее об интерпретации см. в [описании mkdir()](https://python-all.ru/3.5/library/os.html#mkdir-modebits).11421143Если *exist\_ok* равен `False` (значение по умолчанию), то возникает [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError), если целевой каталог уже существует.11441145> **Примечание**1146>1147> [`makedirs()`](https://python-all.ru/3.5/library/os.html#os.makedirs) запутается, если элементы пути для создания включают [`pardir`](https://python-all.ru/3.5/library/os.html#os.pardir) (например, «..» в UNIX-системах).11481149Эта функция корректно обрабатывает UNC-пути.11501151Новое в версии 3.2: Параметр *exist\_ok*.11521153Изменено в версии 3.4.1: До Python 3.4.1, если *exist\_ok* было `True` и каталог существовал, [`makedirs()`](https://python-all.ru/3.5/library/os.html#os.makedirs) всё равно вызывал ошибку, если *mode* не совпадал с режимом существующего каталога. Поскольку такое поведение было невозможно реализовать безопасно, оно было удалено в Python 3.4.1. См. [bpo-21082](https://python-all.ru/3.5/library/os.html).11541155#### `os.mkfifo(path, mode=0o666, *, dir_fd=None)`11561157Создаёт FIFO (именованный канал) с именем *path* и числовым режимом *mode*. Значение текущего umask сначала вычитается из режима.11581159Эта функция также поддерживает [пути, относительные к дескрипторам каталогов](https://python-all.ru/3.5/library/os.html#dir-fd).11601161FIFO – это каналы, к которым можно обращаться как к обычным файлам. FIFO существуют до тех пор, пока их не удалят (например, с помощью [`os.unlink()`](https://python-all.ru/3.5/library/os.html#os.unlink)). Как правило, FIFO используются как точка встречи между процессами типа «клиент» и «сервер»: сервер открывает FIFO для чтения, а клиент открывает его для записи. Обратите внимание, что [`mkfifo()`](https://python-all.ru/3.5/library/os.html#os.mkfifo) не открывает FIFO – он только создаёт точку встречи.11621163Доступность: Unix.11641165Новое в версии 3.3: Аргумент *dir\_fd*.11661167#### `os.mknod(path, mode=0o600, device=0, *, dir_fd=None)`11681169Создаёт узел файловой системы (файл, специальный файл устройства или именованный канал) с именем *path*. *mode* задаёт как права доступа, так и тип создаваемого узла; значение получается комбинированием (побитовым ИЛИ) с одной из констант `stat.S_IFREG`, `stat.S_IFCHR`, `stat.S_IFBLK` и `stat.S_IFIFO` (эти константы доступны в [`stat`](https://python-all.ru/3.5/library/stat.html#module-stat)). Для `stat.S_IFCHR` и `stat.S_IFBLK` параметр *device* определяет вновь создаваемый специальный файл устройства (вероятно, с помощью [`os.makedev()`](https://python-all.ru/3.5/library/os.html#os.makedev)); в противном случае он игнорируется.11701171Эта функция также поддерживает [пути, относительные к дескрипторам каталогов](https://python-all.ru/3.5/library/os.html#dir-fd).11721173Доступность: Unix.11741175Новое в версии 3.3: Аргумент *dir\_fd*.11761177#### `os.major(device)`11781179Извлекает старший номер устройства из сырого номера устройства (обычно поля `st_dev` или `st_rdev` из `stat`).11801181#### `os.minor(device)`11821183Извлекает младший номер устройства из сырого номера устройства (обычно поля `st_dev` или `st_rdev` из `stat`).11841185#### `os.makedev(major, minor)`11861187Составляет сырой номер устройства из старшего и младшего номеров устройства.11881189#### `os.pathconf(path, name)`11901191Возвращает информацию о системной конфигурации для указанного файла. *name* задаёт запрашиваемое значение конфигурации; это может быть строка, содержащая имя определённого системного значения. Эти имена заданы в ряде стандартов (POSIX.1, Unix 95, Unix 98 и других). На некоторых платформах могут быть также определены дополнительные имена. Имена, известные операционной системе, приведены в словаре `pathconf_names`. Для переменных конфигурации, не включённых в это соответствие, допускается также передача целого числа в качестве *name*.11921193Если *name* – строка и не известна, возбуждается исключение [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError). Если конкретное значение для *name* не поддерживается хост-системой, даже если оно присутствует в `pathconf_names`, возбуждается исключение [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError) с [`errno.EINVAL`](https://python-all.ru/3.5/library/errno.html#errno.EINVAL) в качестве кода ошибки.11941195Эта функция может поддерживать [указание файлового дескриптора](https://python-all.ru/3.5/library/os.html#path-fd).11961197Доступность: Unix.11981199#### `os.pathconf_names`12001201Словарь, отображающий имена, принимаемые функциями [`pathconf()`](https://python-all.ru/3.5/library/os.html#os.pathconf) и [`fpathconf()`](https://python-all.ru/3.5/library/os.html#os.fpathconf), в целочисленные значения, определённые для этих имён хост-операционной системой. Его можно использовать для определения набора имён, известных системе.12021203Доступность: Unix.12041205#### `os.readlink(path, *, dir_fd=None)`12061207Возвращает строку, представляющую путь, на который указывает символическая ссылка. Результат может быть абсолютным или относительным путём; если он относительный, его можно преобразовать в абсолютный с помощью `os.path.join(os.path.dirname(path), result)`.12081209Если *path* является строковым объектом, то результат также будет строковым объектом, и вызов может вызвать UnicodeDecodeError. Если *path* является объектом bytes, то результат будет объектом bytes.12101211Эта функция также поддерживает [пути, относительные к дескрипторам каталогов](https://python-all.ru/3.5/library/os.html#dir-fd).12121213Доступность: Unix, Windows12141215Изменено в версии 3.2: Добавлена поддержка символических ссылок Windows 6.0 (Vista).12161217Новое в версии 3.3: Аргумент *dir\_fd*.12181219#### `os.remove(path, *, dir_fd=None)`12201221Удаляет файл *path*. Если *path* является каталогом, возбуждается [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError). Используйте [`rmdir()`](https://python-all.ru/3.5/library/os.html#os.rmdir) для удаления каталогов.12221223Эта функция может поддерживать [пути, относительные к дескрипторам каталогов](https://python-all.ru/3.5/library/os.html#dir-fd).12241225В Windows попытка удалить файл, который используется, приводит к возбуждению исключения; в Unix запись в каталоге удаляется, но память, выделенная файлу, не освобождается, пока исходный файл не перестанет использоваться.12261227Эта функция семантически идентична [`unlink()`](https://python-all.ru/3.5/library/os.html#os.unlink).12281229Новое в версии 3.3: Аргумент *dir\_fd*.12301231#### `os.removedirs(name)`12321233Рекурсивно удаляет каталоги. Работает как [`rmdir()`](https://python-all.ru/3.5/library/os.html#os.rmdir), за исключением того, что если конечный каталог успешно удалён, [`removedirs()`](https://python-all.ru/3.5/library/os.html#os.removedirs) пытается последовательно удалить все родительские каталоги, указанные в *path*, пока не возникнет ошибка (которая игнорируется, поскольку обычно это означает, что родительский каталог не пуст). Например, `os.removedirs('foo/bar/baz')` сначала удалит каталог `'foo/bar/baz'`, а затем удалит `'foo/bar'` и `'foo'`, если они пусты. Возбуждает [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError), если конечный каталог не удалось удалить.12341235#### `os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)`12361237Переименовывает файл или каталог *src* в *dst*. Если *dst* является каталогом, [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError) будет возбуждено. В Unix, если *dst* существует и является файлом, он будет молча заменён при наличии у пользователя соответствующих прав. Операция может завершиться ошибкой в некоторых вариантах Unix, если *src* и *dst* находятся в разных файловых системах. В случае успеха переименование будет атомарной операцией (это требование POSIX). В Windows, если *dst* уже существует, [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError) будет возбуждено, даже если он является файлом.12381239Эта функция может поддерживать указание *src\_dir\_fd* и/или *dst\_dir\_fd* для передачи [путей, относительных к дескрипторам каталогов](https://python-all.ru/3.5/library/os.html#dir-fd).12401241Если требуется кроссплатформенная перезапись целевого объекта, используйте [`replace()`](https://python-all.ru/3.5/library/os.html#os.replace).12421243Новое в версии 3.3: Аргументы *src\_dir\_fd* и *dst\_dir\_fd*.12441245#### `os.renames(old, new)`12461247Функция рекурсивного переименования каталогов или файлов. Работает как [`rename()`](https://python-all.ru/3.5/library/os.html#os.rename), за исключением того, что сначала предпринимается попытка создать все промежуточные каталоги, необходимые для формирования нового пути. После переименования каталоги, соответствующие самым правым сегментам пути старого имени, будут удалены с помощью [`removedirs()`](https://python-all.ru/3.5/library/os.html#os.removedirs).12481249> **Примечание**1250>1251> Эта функция может завершиться неудачей, если новая структура каталогов уже создана, но недостаточно прав для удаления конечного каталога или файла.12521253#### `os.replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None)`12541255Переименовывает файл или каталог *src* в *dst*. Если *dst* является каталогом, будет возбуждено [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError). Если *dst* существует и является файлом, он будет бесшумно заменен, если у пользователя есть соответствующие права. Операция может завершиться неудачей, если *src* и *dst* находятся в разных файловых системах. В случае успеха переименование будет атомарной операцией (это требование POSIX).12561257Эта функция может поддерживать указание *src\_dir\_fd* и/или *dst\_dir\_fd* для передачи [путей, относительных к дескрипторам каталогов](https://python-all.ru/3.5/library/os.html#dir-fd).12581259Новое в версии 3.3.12601261#### `os.rmdir(path, *, dir_fd=None)`12621263Удаляет каталог *path*. Работает только когда каталог пуст, в противном случае возбуждается [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError). Для удаления целых деревьев каталогов можно использовать [`shutil.rmtree()`](https://python-all.ru/3.5/library/shutil.html#shutil.rmtree).12641265Эта функция может поддерживать [пути, относительные к дескрипторам каталогов](https://python-all.ru/3.5/library/os.html#dir-fd).12661267Новое в версии 3.3: Параметр *dir\_fd*.12681269#### `os.scandir(path='.')`12701271Возвращает итератор объектов [`DirEntry`](https://python-all.ru/3.5/library/os.html#os.DirEntry), соответствующих записям в каталоге, заданном *path*. Записи выдаются в произвольном порядке; специальные записи `'.'` и `'..'` не включаются.12721273Использование [`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) вместо [`listdir()`](https://python-all.ru/3.5/library/os.html#os.listdir) может значительно повысить производительность кода, которому также требуется информация о типе файла или его атрибутах, поскольку объекты [`DirEntry`](https://python-all.ru/3.5/library/os.html#os.DirEntry) предоставляют эту информацию, если операционная система предоставляет её при сканировании каталога. Все методы [`DirEntry`](https://python-all.ru/3.5/library/os.html#os.DirEntry) могут выполнять системный вызов, но [`is_dir()`](https://python-all.ru/3.5/library/os.html#os.DirEntry.is_dir) и [`is_file()`](https://python-all.ru/3.5/library/os.html#os.DirEntry.is_file) обычно требуют системного вызова только для символических ссылок; [`DirEntry.stat()`](https://python-all.ru/3.5/library/os.html#os.DirEntry.stat) всегда требует системного вызова в Unix, но в Windows – только для символических ссылок.12741275В Unix *path* может быть типа [`str`](https://python-all.ru/3.5/library/stdtypes.html#str) или [`bytes`](https://python-all.ru/3.5/library/functions.html#bytes) (используйте [`fsencode()`](https://python-all.ru/3.5/library/os.html#os.fsencode) и [`fsdecode()`](https://python-all.ru/3.5/library/os.html#os.fsdecode) для кодирования и декодирования путей [`bytes`](https://python-all.ru/3.5/library/functions.html#bytes)). В Windows *path* должен быть типа [`str`](https://python-all.ru/3.5/library/stdtypes.html#str). В обеих системах тип атрибутов [`name`](https://python-all.ru/3.5/library/os.html#os.DirEntry.name) и [`path`](https://python-all.ru/3.5/library/os.html#os.DirEntry.path) каждого [`DirEntry`](https://python-all.ru/3.5/library/os.html#os.DirEntry) будет того же типа, что и *path*.12761277Следующий пример демонстрирует простое использование [`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) для отображения всех файлов (кроме каталогов) в заданном *пути*, имена которых не начинаются с `'.'`. Вызов `entry.is_file()` обычно не требует дополнительного системного вызова:12781279```python1280for entry in os.scandir(path):1281   if not entry.name.startswith('.') and entry.is_file():1282       print(entry.name)1283```12841285> **Примечание**1286>1287> В системах на базе Unix [`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) использует системные функции [opendir()](https://python-all.ru/3.5/library/os.html) и [readdir()](https://python-all.ru/3.5/library/os.html). В Windows используются функции Win32 [FindFirstFileW](https://python-all.ru/3.5/library/os.html) и [FindNextFileW](https://python-all.ru/3.5/library/os.html).12881289Новое в версии 3.5.12901291#### `class os.DirEntry`12921293Объект, возвращаемый [`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) для предоставления пути к файлу и других атрибутов записи каталога.12941295[`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) предоставляет как можно больше этой информации без выполнения дополнительных системных вызовов. Когда выполняется системный вызов `stat()` или `lstat()`, объект `DirEntry` кэширует результат.12961297Экземпляры `DirEntry` не предназначены для хранения в долгоживущих структурах данных; если известно, что метаданные файла изменились или прошло много времени с момента вызова [`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir), вызовите `os.stat(entry.path)`, чтобы получить актуальную информацию.12981299Поскольку методы `DirEntry` могут выполнять системные вызовы, они также могут возбуждать [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError). Если требуется очень точный контроль над ошибками, можно перехватывать [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError) при вызове одного из методов `DirEntry` и обрабатывать соответствующим образом.13001301Атрибуты и методы экземпляра `DirEntry`:13021303#### `name`13041305Базовое имя файла записи, относительно [`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) аргумента *path*.13061307Атрибут [`name`](https://python-all.ru/3.5/library/os.html#os.name) будет того же типа (`str` или `bytes`), что и аргумент [`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) *path*. Используйте [`fsdecode()`](https://python-all.ru/3.5/library/os.html#os.fsdecode) для декодирования байтовых имён файлов.13081309#### `path`13101311Полное имя пути записи: эквивалентно `os.path.join(scandir_path, entry.name)`, где *scandir\_path* – это аргумент [`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) *path*. Путь является абсолютным только если аргумент [`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) *path* был абсолютным.13121313Атрибут [`path`](https://python-all.ru/3.5/library/os.path.html#module-os.path) будет того же типа (`str` или `bytes`), что и аргумент [`scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) *path*. Используйте [`fsdecode()`](https://python-all.ru/3.5/library/os.html#os.fsdecode) для декодирования байтовых имён файлов.13141315#### `inode()`13161317Возвращает номер инода записи.13181319Результат кэшируется в объекте `DirEntry`. Используйте `os.stat(entry.path, follow_symlinks=False).st_ino` для получения актуальной информации.13201321При первом (некэшированном) вызове системный вызов требуется в Windows, но не в Unix.13221323#### `is_dir(*, follow_symlinks=True)`13241325Возвращает `True`, если эта запись является каталогом или символической ссылкой, указывающей на каталог; возвращает `False`, если запись является или указывает на любой другой тип файла, или если она больше не существует.13261327Если *follow\_symlinks* имеет значение `False`, возвращает `True`, только если эта запись является каталогом (без перехода по символическим ссылкам); возвращает `False`, если запись является файлом любого другого типа или если она больше не существует.13281329Результат кэшируется в объекте `DirEntry`, с отдельным кэшем для *follow\_symlinks* `True` и `False`. Вызовите [`os.stat()`](https://python-all.ru/3.5/library/os.html#os.stat) вместе с [`stat.S_ISDIR()`](https://python-all.ru/3.5/library/stat.html#stat.S_ISDIR) для получения актуальной информации.13301331При первом (некэшированном) вызове системный вызов не требуется в большинстве случаев. В частности, для несимволических ссылок ни Windows, ни Unix не требуют системного вызова, за исключением некоторых файловых систем Unix, таких как сетевые файловые системы, которые возвращают `dirent.d_type == DT_UNKNOWN`. Если запись является символической ссылкой, системный вызов потребуется для перехода по ссылке, если только *follow\_symlinks* не равен `False`.13321333Этот метод может вызвать [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError), например [`PermissionError`](https://python-all.ru/3.5/library/exceptions.html#PermissionError), но [`FileNotFoundError`](https://python-all.ru/3.5/library/exceptions.html#FileNotFoundError) перехватывается и не выбрасывается.13341335#### `is_file(*, follow_symlinks=True)`13361337Возвращает `True`, если эта запись является файлом или символической ссылкой, указывающей на файл; возвращает `False`, если запись является или указывает на каталог или другую запись, не являющуюся файлом, или если она больше не существует.13381339Если *follow\_symlinks* имеет значение `False`, возвращает `True`, только если эта запись является файлом (без перехода по символическим ссылкам); возвращает `False`, если запись является каталогом или другой записью, не являющейся файлом, или если она больше не существует.13401341Результат кэшируется в объекте `DirEntry`. Кэширование, выполненные системные вызовы и возникшие исключения обрабатываются в соответствии с [`is_dir()`](https://python-all.ru/3.5/library/os.html#os.DirEntry.is_dir).13421343#### `is_symlink()`13441345Возвращает `True`, если эта запись является символической ссылкой (даже битой); возвращает `False`, если запись указывает на каталог или любой файл, или если она больше не существует.13461347Результат кэшируется в объекте `DirEntry`. Вызовите [`os.path.islink()`](https://python-all.ru/3.5/library/os.path.html#os.path.islink), чтобы получить актуальную информацию.13481349При первом некэшированном вызове в большинстве случаев системный вызов не требуется. В частности, ни Windows, ни Unix не требуют системного вызова, за исключением некоторых файловых систем Unix, таких как сетевые файловые системы, которые возвращают `dirent.d_type == DT_UNKNOWN`.13501351Этот метод может вызвать [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError), например [`PermissionError`](https://python-all.ru/3.5/library/exceptions.html#PermissionError), но [`FileNotFoundError`](https://python-all.ru/3.5/library/exceptions.html#FileNotFoundError) перехватывается и не выбрасывается.13521353#### `stat(*, follow_symlinks=True)`13541355Возвращает объект [`stat_result`](https://python-all.ru/3.5/library/os.html#os.stat_result) для этой записи. По умолчанию этот метод следует символическим ссылкам; чтобы получить stat символической ссылки, добавьте аргумент `follow_symlinks=False`.13561357В Unix этот метод всегда требует системного вызова. В Windows он требует системного вызова, только если *follow\_symlinks* равно `True` и запись является символической ссылкой.13581359В Windows атрибуты `st_ino`, `st_dev` и `st_nlink` объекта [`stat_result`](https://python-all.ru/3.5/library/os.html#os.stat_result) всегда равны нулю. Вызовите [`os.stat()`](https://python-all.ru/3.5/library/os.html#os.stat), чтобы получить эти атрибуты.13601361Результат кэшируется в объекте `DirEntry`, с отдельным кэшем для *follow\_symlinks* `True` и `False`. Вызовите [`os.stat()`](https://python-all.ru/3.5/library/os.html#os.stat), чтобы получить актуальную информацию.13621363Обратите внимание на соответствие между некоторыми атрибутами и методами `DirEntry` и [`pathlib.Path`](https://python-all.ru/3.5/library/pathlib.html#pathlib.Path). В частности, атрибут `name` имеет тот же смысл, что и методы `is_dir()`, `is_file()`, `is_symlink()` и `stat()`.13641365Новое в версии 3.5.13661367#### `os.stat(path, *, dir_fd=None, follow_symlinks=True)`13681369Получить состояние файла или файлового дескриптора. Выполняет эквивалент системного вызова `stat()` по указанному пути. *path* может быть задан как строка, байтовая строка или открытый файловый дескриптор. Возвращает объект [`stat_result`](https://python-all.ru/3.5/library/os.html#os.stat_result).13701371Эта функция обычно следует символическим ссылкам; чтобы получить stat символической ссылки, добавьте аргумент `follow_symlinks=False` или используйте [`lstat()`](https://python-all.ru/3.5/library/os.html#os.lstat).13721373Эта функция поддерживает [указание файлового дескриптора](https://python-all.ru/3.5/library/os.html#path-fd) и [отказ от следования симлинкам](https://python-all.ru/3.5/library/os.html#follow-symlinks).13741375Пример:13761377```python1378>>> import os1379>>> statinfo = os.stat('somefile.txt')1380>>> statinfo1381os.stat_result(st_mode=33188, st_ino=7876932, st_dev=234881026,1382st_nlink=1, st_uid=501, st_gid=501, st_size=264, st_atime=1297230295,1383st_mtime=1297230027, st_ctime=1297230027)1384>>> statinfo.st_size13852641386```13871388> **См. также**1389>1390> Функции [`fstat()`](https://python-all.ru/3.5/library/os.html#os.fstat) и [`lstat()`](https://python-all.ru/3.5/library/os.html#os.lstat).13911392Новое в версии 3.3: Добавлены аргументы *dir\_fd* и *follow\_symlinks*, позволяющие указывать файловый дескриптор вместо пути.13931394#### `class os.stat_result`13951396Объект, атрибуты которого примерно соответствуют членам структуры `stat`. Используется для результата [`os.stat()`](https://python-all.ru/3.5/library/os.html#os.stat), [`os.fstat()`](https://python-all.ru/3.5/library/os.html#os.fstat) и [`os.lstat()`](https://python-all.ru/3.5/library/os.html#os.lstat).13971398Атрибуты:13991400#### `st_mode`14011402Режим файла: тип файла и биты режима (права доступа).14031404#### `st_ino`14051406Номер inode.14071408#### `st_dev`14091410Идентификатор устройства, на котором находится этот файл.14111412#### `st_nlink`14131414Количество жёстких ссылок.14151416#### `st_uid`14171418Идентификатор пользователя-владельца файла.14191420#### `st_gid`14211422Идентификатор группы владельца файла.14231424#### `st_size`14251426Размер файла в байтах, если это обычный файл или символическая ссылка. Размер символической ссылки – это длина содержащегося в ней имени пути без завершающего нулевого байта.14271428Временные метки:14291430#### `st_atime`14311432Время последнего доступа, выраженное в секундах.14331434#### `st_mtime`14351436Время последнего изменения содержимого, выраженное в секундах.14371438#### `st_ctime`14391440Зависит от платформы:14411442- время последнего изменения метаданных в Unix,1443- время создания в Windows, выраженное в секундах.14441445#### `st_atime_ns`14461447Время последнего доступа, выраженное в наносекундах в виде целого числа.14481449#### `st_mtime_ns`14501451Время последнего изменения содержимого, выраженное в наносекундах в виде целого числа.14521453#### `st_ctime_ns`14541455Зависит от платформы:14561457- время последнего изменения метаданных в Unix,1458- время создания в Windows, выраженное в наносекундах в виде целого числа.14591460См. также функцию [`stat_float_times()`](https://python-all.ru/3.5/library/os.html#os.stat_float_times).14611462> **Примечание**1463>1464> Точный смысл и разрешение атрибутов [`st_atime`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_atime), [`st_mtime`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_mtime) и [`st_ctime`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_ctime) зависят от операционной системы и файловой системы. Например, в системах Windows, использующих файловые системы FAT или FAT32, атрибут [`st_mtime`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_mtime) имеет разрешение 2 секунды, а [`st_atime`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_atime) – всего 1 день. Подробности см. в документации операционной системы.1465>1466> Аналогично, хотя [`st_atime_ns`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_atime_ns), [`st_mtime_ns`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_mtime_ns), и [`st_ctime_ns`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_ctime_ns) всегда выражаются в наносекундах, многие системы не обеспечивают наносекундную точность. В системах, которые обеспечивают наносекундную точность, объект с плавающей запятой, используемый для хранения [`st_atime`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_atime), [`st_mtime`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_mtime) и [`st_ctime`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_ctime), не может сохранить всю эту точность и поэтому будет немного неточным. Если требуются точные временные метки, всегда следует использовать [`st_atime_ns`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_atime_ns), [`st_mtime_ns`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_mtime_ns) и [`st_ctime_ns`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_ctime_ns).14671468В некоторых системах Unix (например, Linux) могут быть также доступны следующие атрибуты:14691470#### `st_blocks`14711472Количество 512-байтовых блоков, выделенных файлу. Может быть меньше [`st_size`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_size)/512, если в файле есть дырки (holes).14731474#### `st_blksize`14751476«Предпочтительный» размер блока для эффективного ввода-вывода файловой системы. Запись в файл блоками меньшего размера может привести к неэффективному чтению-изменению-перезаписи (read-modify-rewrite).14771478#### `st_rdev`14791480Тип устройства, если inode является устройством.14811482#### `st_flags`14831484Определённые пользователем флаги для файла.14851486В других системах Unix (например, FreeBSD) могут быть доступны следующие атрибуты (но могут заполняться, только если root попытается их использовать):14871488#### `st_gen`14891490Номер поколения файла.14911492#### `st_birthtime`14931494Время создания файла.14951496В системах Mac OS также могут быть доступны следующие атрибуты:14971498#### `st_rsize`14991500Реальный размер файла.15011502#### `st_creator`15031504Создатель файла.15051506#### `st_type`15071508Тип файла.15091510В системах Windows также доступен следующий атрибут:15111512#### `st_file_attributes`15131514Атрибуты файлов Windows: член `dwFileAttributes` структуры `BY_HANDLE_FILE_INFORMATION`, возвращаемой функцией `GetFileInformationByHandle()`. Смотрите константы `FILE_ATTRIBUTE_*` в модуле [`stat`](https://python-all.ru/3.5/library/stat.html#module-stat).15151516Стандартный модуль [`stat`](https://python-all.ru/3.5/library/stat.html#module-stat) определяет функции и константы, полезные для извлечения информации из структуры `stat`. (В Windows некоторые поля заполняются фиктивными значениями.)15171518Для обратной совместимости экземпляр [`stat_result`](https://python-all.ru/3.5/library/os.html#os.stat_result) также доступен как кортеж из как минимум 10 целых чисел, представляющих наиболее важные (и переносимые) члены структуры `stat`, в порядке [`st_mode`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_mode), [`st_ino`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_ino), [`st_dev`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_dev), [`st_nlink`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_nlink), [`st_uid`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_uid), [`st_gid`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_gid), [`st_size`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_size), [`st_atime`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_atime), [`st_mtime`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_mtime), [`st_ctime`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_ctime). Некоторые реализации могут добавлять больше элементов в конец. Для совместимости со старыми версиями Python обращение к [`stat_result`](https://python-all.ru/3.5/library/os.html#os.stat_result) как к кортежу всегда возвращает целые числа.15191520Новое в версии 3.3: Добавлены члены [`st_atime_ns`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_atime_ns), [`st_mtime_ns`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_mtime_ns) и [`st_ctime_ns`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_ctime_ns).15211522Новое в версии 3.5: Добавлен член [`st_file_attributes`](https://python-all.ru/3.5/library/os.html#os.stat_result.st_file_attributes) в Windows.15231524#### `os.stat_float_times([newvalue])`15251526Определяет, представляет ли [`stat_result`](https://python-all.ru/3.5/library/os.html#os.stat_result) временные метки как объекты float. Если *newvalue* равен `True`, будущие вызовы [`stat()`](https://python-all.ru/3.5/library/os.html#os.stat) возвращают float, если равен `False`, будущие вызовы возвращают int. Если *newvalue* опущен, возвращает текущую настройку.15271528Для совместимости со старыми версиями Python, доступ к [`stat_result`](https://python-all.ru/3.5/library/os.html#os.stat_result) как к кортежу всегда возвращает целые числа.15291530Python теперь по умолчанию возвращает значения float. Приложения, которые некорректно работают с вещественными временными метками, могут использовать эту функцию для восстановления старого поведения.15311532Разрешение временных меток (то есть наименьшая возможная дробная часть) зависит от системы. Некоторые системы поддерживают только секундное разрешение; на таких системах дробная часть всегда будет равна нулю.15331534Рекомендуется изменять этот параметр только во время запуска программы в модуле *\_\_main\_\_*; библиотеки никогда не должны изменять этот параметр. Если приложение использует библиотеку, которая некорректно работает при обработке вещественных временных меток, этому приложению следует отключить эту возможность до тех пор, пока библиотека не будет исправлена.15351536Устарело с версии 3.3.15371538#### `os.statvfs(path)`15391540Выполняет системный вызов `statvfs()` для указанного пути. Возвращаемое значение – объект, атрибуты которого описывают файловую систему по указанному пути и соответствуют членам структуры `statvfs`, а именно: `f_bsize`, `f_frsize`, `f_blocks`, `f_bfree`, `f_bavail`, `f_files`, `f_ffree`, `f_favail`, `f_flag`, `f_namemax`.15411542Две константы уровня модуля определены для битовых флагов атрибута `f_flag`: если установлен `ST_RDONLY`, файловая система смонтирована только для чтения, а если установлен `ST_NOSUID`, семантика битов setuid/setgid отключена или не поддерживается.15431544Дополнительные константы уровня модуля определены для систем на базе GNU/glibc. Это `ST_NODEV` (запрет доступа к файлам устройств), `ST_NOEXEC` (запрет выполнения программ), `ST_SYNCHRONOUS` (запись синхронизируется немедленно), `ST_MANDLOCK` (разрешение обязательных блокировок в ФС), `ST_WRITE` (запись в файл/каталог/символическую ссылку), `ST_APPEND` (файл только для добавления), `ST_IMMUTABLE` (неизменяемый файл), `ST_NOATIME` (не обновлять время доступа), `ST_NODIRATIME` (не обновлять время доступа к каталогу), `ST_RELATIME` (обновлять atime относительно mtime/ctime).15451546Эта функция может поддерживать [указание файлового дескриптора](https://python-all.ru/3.5/library/os.html#path-fd).15471548Изменено в версии 3.2: Были добавлены константы `ST_RDONLY` и `ST_NOSUID`.15491550Изменено в версии 3.4: Были добавлены константы `ST_NODEV`, `ST_NOEXEC`, `ST_SYNCHRONOUS`, `ST_MANDLOCK`, `ST_WRITE`, `ST_APPEND`, `ST_IMMUTABLE`, `ST_NOATIME`, `ST_NODIRATIME` и `ST_RELATIME`.15511552Доступность: Unix.15531554Новое в версии 3.3: добавлена поддержка указания открытого файлового дескриптора для *path*.15551556#### `os.supports_dir_fd`15571558Объект [`Set`](https://python-all.ru/3.5/library/collections.abc.html#collections.abc.Set), указывающий, какие функции модуля [`os`](https://python-all.ru/3.5/library/os.html#module-os) разрешают использование их параметра *dir\_fd*. Разные платформы предоставляют разные возможности, и опция, работающая на одной, может не поддерживаться на другой. Ради единообразия функции, поддерживающие *dir\_fd*, всегда позволяют указывать этот параметр, но вызывают исключение, если функциональность недоступна.15591560Чтобы проверить, разрешает ли конкретная функция использовать свой параметр *dir\_fd*, используйте оператор `in` на `supports_dir_fd`. Например, это выражение определяет, доступен ли локально параметр *dir\_fd* функции [`os.stat()`](https://python-all.ru/3.5/library/os.html#os.stat):15611562```python1563os.stat in os.supports_dir_fd1564```15651566В настоящее время параметры *dir\_fd* работают только на Unix-платформах; ни один из них не работает в Windows.15671568Новое в версии 3.3.15691570#### `os.supports_effective_ids`15711572Объект [`Set`](https://python-all.ru/3.5/library/collections.abc.html#collections.abc.Set), указывающий, какие функции модуля [`os`](https://python-all.ru/3.5/library/os.html#module-os) разрешают использование параметра *effective\_ids* для [`os.access()`](https://python-all.ru/3.5/library/os.html#os.access). Если локальная платформа это поддерживает, коллекция будет содержать [`os.access()`](https://python-all.ru/3.5/library/os.html#os.access), иначе она будет пуста.15731574Чтобы проверить, можно ли использовать параметр *effective\_ids* для [`os.access()`](https://python-all.ru/3.5/library/os.html#os.access), используйте оператор `in` на `supports_effective_ids`, например:15751576```python1577os.access in os.supports_effective_ids1578```15791580В настоящее время *effective\_ids* работает только на Unix-платформах; он не работает в Windows.15811582Новое в версии 3.3.15831584#### `os.supports_fd`15851586Объект [`Set`](https://python-all.ru/3.5/library/collections.abc.html#collections.abc.Set), указывающий, какие функции модуля [`os`](https://python-all.ru/3.5/library/os.html#module-os) разрешают указывать свой параметр *path* в виде открытого файлового дескриптора. Разные платформы предоставляют разные возможности, и опция, работающая на одной, может не поддерживаться на другой. Ради единообразия функции, поддерживающие *fd*, всегда позволяют указывать этот параметр, но вызывают исключение, если функциональность недоступна.15871588Чтобы проверить, разрешает ли конкретная функция указывать открытый файловый дескриптор для своего параметра *path*, используйте оператор `in` на `supports_fd`. Например, это выражение определяет, принимает ли [`os.chdir()`](https://python-all.ru/3.5/library/os.html#os.chdir) открытые файловые дескрипторы при вызове на локальной платформе:15891590```python1591os.chdir in os.supports_fd1592```15931594Новое в версии 3.3.15951596#### `os.supports_follow_symlinks`15971598Объект [`Set`](https://python-all.ru/3.5/library/collections.abc.html#collections.abc.Set), указывающий, какие функции модуля [`os`](https://python-all.ru/3.5/library/os.html#module-os) разрешают использование их параметра *follow\_symlinks*. Разные платформы предоставляют разные возможности, и опция, работающая на одной, может не поддерживаться на другой. Ради единообразия функции, поддерживающие *follow\_symlinks*, всегда позволяют указывать этот параметр, но вызывают исключение, если функциональность недоступна.15991600Чтобы проверить, разрешает ли конкретная функция использовать свой параметр *follow\_symlinks*, используйте оператор `in` на `supports_follow_symlinks`. Например, это выражение определяет, доступен ли локально параметр *follow\_symlinks* функции [`os.stat()`](https://python-all.ru/3.5/library/os.html#os.stat):16011602```python1603os.stat in os.supports_follow_symlinks1604```16051606Новое в версии 3.3.16071608#### `os.symlink(src, dst, target_is_directory=False, *, dir_fd=None)`16091610Создает символическую ссылку, указывающую на *src* с именем *dst*.16111612В Windows символическая ссылка представляет собой файл или каталог и не изменяется динамически под цель. Если цель существует, тип ссылки создаётся соответствующим. В противном случае, если *target\_is\_directory* равно `True`, создаётся ссылка на каталог, иначе – на файл (по умолчанию). На платформах, отличных от Windows, параметр *target\_is\_directory* игнорируется.16131614Поддержка символических ссылок была введена в Windows 6.0 (Vista). [`symlink()`](https://python-all.ru/3.5/library/os.html#os.symlink) вызовет [`NotImplementedError`](https://python-all.ru/3.5/library/exceptions.html#NotImplementedError) в версиях Windows старше 6.0.16151616Эта функция может поддерживать [пути, относительные к дескрипторам каталогов](https://python-all.ru/3.5/library/os.html#dir-fd).16171618> **Примечание**1619>1620> В Windows для успешного создания символических ссылок требуется привилегия *SeCreateSymbolicLinkPrivilege*. Эта привилегия обычно не предоставляется обычным пользователям, но доступна учетным записям, которые могут повысить привилегии до уровня администратора. Либо получение этой привилегии, либо запуск приложения от имени администратора – способы успешно создавать символические ссылки.1621>1622> [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError) возникает, когда функция вызывается непривилегированным пользователем.16231624Доступность: Unix, Windows.16251626Изменено в версии 3.2: Добавлена поддержка символических ссылок Windows 6.0 (Vista).16271628Новое в версии 3.3: Добавлен аргумент *dir\_fd*, и теперь *target\_is\_directory* доступен на платформах, отличных от Windows.16291630#### `os.sync()`16311632Принудительная запись всех данных на диск.16331634Доступность: Unix.16351636Новое в версии 3.3.16371638#### `os.truncate(path, length)`16391640Усекает файл, соответствующий *path*, так, чтобы его размер не превышал *length* байт.16411642Эта функция может поддерживать [указание файлового дескриптора](https://python-all.ru/3.5/library/os.html#path-fd).16431644Доступность: Unix, Windows.16451646Новое в версии 3.3.16471648Изменено в версии 3.5: Добавлена поддержка Windows16491650#### `os.unlink(path, *, dir_fd=None)`16511652Удаляет файл *path*. Эта функция семантически идентична [`remove()`](https://python-all.ru/3.5/library/os.html#os.remove); имя `unlink` – это её традиционное имя в Unix. Подробнее см. документацию [`remove()`](https://python-all.ru/3.5/library/os.html#os.remove).16531654Новое в версии 3.3: Параметр *dir\_fd*.16551656#### `os.utime(path, times=None, *, [ns, ]dir_fd=None, follow_symlinks=True)`16571658Устанавливает время доступа и изменения файла, указанного в *path*.16591660[`utime()`](https://python-all.ru/3.5/library/os.html#os.utime) принимает два необязательных параметра: *times* и *ns*. Они задают время, устанавливаемое для *path*, и используются следующим образом:16611662- Если указан *ns*, то это должен быть кортеж из двух элементов вида `(atime_ns, mtime_ns)`, где каждый элемент – целое число, выражающее наносекунды.1663- Если *times* не равен `None`, то это должен быть кортеж из двух элементов вида `(atime, mtime)`, где каждый элемент – int или float, выражающий секунды.1664- Если *times* равен `None`, а *ns* не указан, то это эквивалентно указанию `ns=(atime_ns, mtime_ns)`, где оба времени равны текущему времени.16651666Указывать кортежи одновременно для *times* и *ns* – ошибка.16671668Можно ли передать каталог в качестве *path*, зависит от того, реализует ли операционная система каталоги как файлы (например, Windows этого не делает). Обратите внимание, что точное время, которое вы здесь установите, может не быть возвращено последующим вызовом [`stat()`](https://python-all.ru/3.5/library/os.html#os.stat), в зависимости от разрешения, с которым ваша операционная система записывает время доступа и модификации; см. [`stat()`](https://python-all.ru/3.5/library/os.html#os.stat). Лучший способ сохранить точное время – использовать поля *st\_atime\_ns* и *st\_mtime\_ns* из объекта результата [`os.stat()`](https://python-all.ru/3.5/library/os.html#os.stat) с параметром *ns* для *utime*.16691670Эта функция поддерживает [указание файлового дескриптора](https://python-all.ru/3.5/library/os.html#path-fd), [пути относительно дескрипторов каталогов](https://python-all.ru/3.5/library/os.html#dir-fd) и [не следование по символьным ссылкам](https://python-all.ru/3.5/library/os.html#follow-symlinks).16711672Новое в версии 3.3: добавлена поддержка указания открытого файлового дескриптора для *path*, а также параметров *dir\_fd*, *follow\_symlinks* и *ns*.16731674#### `os.walk(top, topdown=True, onerror=None, followlinks=False)`16751676Генерирует имена файлов в дереве каталогов, обходя дерево сверху вниз или снизу вверх. Для каждого каталога в дереве с корнем в каталоге *top* (включая сам *top*) возвращает кортеж из трех элементов `(dirpath, dirnames, filenames)`.16771678*dirpath* – это строка, путь к каталогу. *dirnames* – список имен подкаталогов в *dirpath* (за исключением `'.'` и `'..'`). *filenames* – список имен файлов, не являющихся каталогами, в *dirpath*. Обратите внимание, что имена в списках не содержат компонентов пути. Чтобы получить полный путь (начинающийся с *top*) к файлу или каталогу в *dirpath*, выполните `os.path.join(dirpath, name)`.16791680Если необязательный аргумент *topdown* равен `True` или не указан, тройка для каталога генерируется до троек для всех его подкаталогов (каталоги обходятся сверху вниз). Если *topdown* равен `False`, тройка для каталога генерируется после троек для всех его подкаталогов (каталоги обходятся снизу вверх). Независимо от значения *topdown*, список подкаталогов извлекается до того, как генерируются кортежи для каталога и его подкаталогов.16811682Когда *topdown* равен `True`, вызывающий код может изменить список *dirnames* на месте (возможно, используя [`del`](https://python-all.ru/3.5/reference/simple_stmts.html#del) или присваивание срезу), и [`walk()`](https://python-all.ru/3.5/library/os.html#os.walk) будет рекурсивно обходить только те подкаталоги, имена которых остались в *dirnames*; это можно использовать для обрезания дерева поиска, задания определенного порядка обхода или даже для уведомления [`walk()`](https://python-all.ru/3.5/library/os.html#os.walk) о каталогах, которые вызывающий код создает или переименовывает до того, как [`walk()`](https://python-all.ru/3.5/library/os.html#os.walk) возобновит работу. Изменение *dirnames*, когда *topdown* равен `False`, не влияет на поведение обхода, потому что в режиме снизу вверх каталоги в *dirnames* генерируются до того, как генерируется сам *dirpath*.16831684По умолчанию ошибки из вызова [`listdir()`](https://python-all.ru/3.5/library/os.html#os.listdir) игнорируются. Если указан необязательный аргумент *onerror*, это должна быть функция; она будет вызвана с одним аргументом – экземпляром [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError). Она может сообщить об ошибке, чтобы продолжить обход, или возбудить исключение, чтобы прервать обход. Обратите внимание, что имя файла доступно как атрибут `filename` объекта исключения.16851686По умолчанию [`walk()`](https://python-all.ru/3.5/library/os.html#os.walk) не будет спускаться в символические ссылки, ведущие к каталогам. Установите *followlinks* в `True`, чтобы посещать каталоги, на которые указывают симлинки, в системах, поддерживающих их.16871688> **Примечание**1689>1690> Имейте в виду, что установка *followlinks* в `True` может привести к бесконечной рекурсии, если ссылка указывает на родительский каталог самой себя. [`walk()`](https://python-all.ru/3.5/library/os.html#os.walk) не отслеживает уже посещенные каталоги.16911692> **Примечание**1693>1694> Если передается относительный путь, не следует изменять текущий рабочий каталог между возобновлениями [`walk()`](https://python-all.ru/3.5/library/os.html#os.walk). [`walk()`](https://python-all.ru/3.5/library/os.html#os.walk) никогда не меняет текущий каталог и предполагает, что и его вызывающий код этого не делает.16951696В этом примере показано количество байтов, занимаемых файлами (не каталогами) в каждом каталоге внутри начального каталога, при этом он не заглядывает ни в один подкаталог CVS:16971698```python1699import os1700from os.path import join, getsize1701for root, dirs, files in os.walk('python/Lib/email'):1702    print(root, "consumes", end=" ")1703    print(sum(getsize(join(root, name)) for name in files), end=" ")1704    print("bytes in", len(files), "non-directory files")1705    if 'CVS' in dirs:1706        dirs.remove('CVS')  # не заходить в CVS-каталоги1707```17081709В следующем примере (простая реализация [`shutil.rmtree()`](https://python-all.ru/3.5/library/shutil.html#shutil.rmtree)) обход дерева снизу вверх обязателен: [`rmdir()`](https://python-all.ru/3.5/library/os.html#os.rmdir) не позволяет удалить каталог, пока он не пуст:17101711```python1712# Удалить всё, доступное из каталога с именем "top",1713# при условии отсутствия символических ссылок.1714# ВНИМАНИЕ: это опасно! Например, если top == '/', это1715# может удалить все ваши файлы на диске.1716import os1717for root, dirs, files in os.walk(top, topdown=False):1718    for name in files:1719        os.remove(os.path.join(root, name))1720    for name in dirs:1721        os.rmdir(os.path.join(root, name))1722```17231724Изменено в версии 3.5: Эта функция теперь вызывает [`os.scandir()`](https://python-all.ru/3.5/library/os.html#os.scandir) вместо [`os.listdir()`](https://python-all.ru/3.5/library/os.html#os.listdir), что делает её быстрее за счет сокращения количества вызовов [`os.stat()`](https://python-all.ru/3.5/library/os.html#os.stat).17251726#### `os.fwalk(top='.', topdown=True, onerror=None, *, follow_symlinks=False, dir_fd=None)`17271728Это работает точно так же, как и [`walk()`](https://python-all.ru/3.5/library/os.html#os.walk), за исключением того, что возвращает 4-кортеж `(dirpath, dirnames, filenames, dirfd)`, и поддерживает `dir_fd`.17291730*dirpath*, *dirnames* и *filenames* идентичны выводу [`walk()`](https://python-all.ru/3.5/library/os.html#os.walk), а *dirfd* – это файловый дескриптор, указывающий на каталог *dirpath*.17311732This function always supports [paths relative to directory descriptors](https://python-all.ru/3.5/library/os.html#dir-fd) and [not following symlinks](https://python-all.ru/3.5/library/os.html#follow-symlinks). Note however that, unlike other functions, the [`fwalk()`](https://python-all.ru/3.5/library/os.html#os.fwalk) default value for *follow\_symlinks* is `False`.17331734> **Примечание**1735>1736> Поскольку [`fwalk()`](https://python-all.ru/3.5/library/os.html#os.fwalk) возвращает файловые дескрипторы, они действительны только до следующего шага итерации, поэтому их следует дублировать (например, с помощью [`dup()`](https://python-all.ru/3.5/library/os.html#os.dup)), если нужно сохранить их дольше.17371738В этом примере показано количество байтов, занимаемых файлами (не каталогами) в каждом каталоге внутри начального каталога, при этом он не заглядывает ни в один подкаталог CVS:17391740```python1741import os1742for root, dirs, files, rootfd in os.fwalk('python/Lib/email'):1743    print(root, "consumes", end="")1744    print(sum([os.stat(name, dir_fd=rootfd).st_size for name in files]),1745          end="")1746    print("bytes in", len(files), "non-directory files")1747    if 'CVS' in dirs:1748        dirs.remove('CVS')  # не заходить в CVS-каталоги1749```17501751В следующем примере обход дерева снизу вверх необходим: [`rmdir()`](https://python-all.ru/3.5/library/os.html#os.rmdir) не позволяет удалить каталог, пока он не пуст:17521753```python1754# Удалить всё, доступное из каталога с именем "top",1755# при условии отсутствия символических ссылок.1756# ВНИМАНИЕ: это опасно! Например, если top == '/', это1757# может удалить все ваши файлы на диске.1758import os1759for root, dirs, files, rootfd in os.fwalk(top, topdown=False):1760    for name in files:1761        os.unlink(name, dir_fd=rootfd)1762    for name in dirs:1763        os.rmdir(name, dir_fd=rootfd)1764```17651766Доступность: Unix.17671768Новое в версии 3.3.17691770### 16.1.5.1. Расширенные атрибуты Linux17711772Новое в версии 3.3.17731774Все эти функции доступны только в Linux.17751776#### `os.getxattr(path, attribute, *, follow_symlinks=True)`17771778Возвращает значение расширенного атрибута файловой системы *attribute* для *path*. *attribute* может быть байтовой строкой или строкой. Если это строка, она кодируется с помощью кодировки файловой системы.17791780Эта функция поддерживает [указание файлового дескриптора](https://python-all.ru/3.5/library/os.html#path-fd) и [отказ от следования симлинкам](https://python-all.ru/3.5/library/os.html#follow-symlinks).17811782#### `os.listxattr(path=None, *, follow_symlinks=True)`17831784Возвращает список расширенных атрибутов файловой системы для *path*. Атрибуты в списке представлены в виде строк, декодированных с использованием кодировки файловой системы. Если *path* равен `None`, [`listxattr()`](https://python-all.ru/3.5/library/os.html#os.listxattr) будет исследовать текущий каталог.17851786Эта функция поддерживает [указание файлового дескриптора](https://python-all.ru/3.5/library/os.html#path-fd) и [отказ от следования симлинкам](https://python-all.ru/3.5/library/os.html#follow-symlinks).17871788#### `os.removexattr(path, attribute, *, follow_symlinks=True)`17891790Удаляет расширенный атрибут файловой системы *attribute* из *path*. *attribute* должен быть байтовой строкой или строкой. Если это строка, она кодируется с помощью кодировки файловой системы.17911792Эта функция поддерживает [указание файлового дескриптора](https://python-all.ru/3.5/library/os.html#path-fd) и [отказ от следования симлинкам](https://python-all.ru/3.5/library/os.html#follow-symlinks).17931794#### `os.setxattr(path, attribute, value, flags=0, *, follow_symlinks=True)`17951796Устанавливает расширенный атрибут файловой системы *attribute* для *path* в значение *value*. *attribute* должен быть байтовой строкой или строкой без встроенных нулевых символов. Если это строка, она кодируется с помощью кодировки файловой системы. *flags* может быть [`XATTR_REPLACE`](https://python-all.ru/3.5/library/os.html#os.XATTR_REPLACE) или [`XATTR_CREATE`](https://python-all.ru/3.5/library/os.html#os.XATTR_CREATE). Если указан [`XATTR_REPLACE`](https://python-all.ru/3.5/library/os.html#os.XATTR_REPLACE), а атрибут не существует, будет возбуждено `EEXISTS`. Если указан [`XATTR_CREATE`](https://python-all.ru/3.5/library/os.html#os.XATTR_CREATE), а атрибут уже существует, он не будет создан и будет возбуждено `ENODATA`.17971798Эта функция поддерживает [указание файлового дескриптора](https://python-all.ru/3.5/library/os.html#path-fd) и [отказ от следования симлинкам](https://python-all.ru/3.5/library/os.html#follow-symlinks).17991800> **Примечание**1801>1802> В версиях ядра Linux до 2.6.39 ошибка приводила к игнорированию аргумента flags в некоторых файловых системах.18031804#### `os.XATTR_SIZE_MAX`18051806Максимальный размер значения расширенного атрибута. В настоящее время на Linux это 64 КиБ.18071808#### `os.XATTR_CREATE`18091810Это возможное значение для аргумента flags в [`setxattr()`](https://python-all.ru/3.5/library/os.html#os.setxattr). Оно указывает, что операция должна создать атрибут.18111812#### `os.XATTR_REPLACE`18131814Это возможное значение для аргумента flags в [`setxattr()`](https://python-all.ru/3.5/library/os.html#os.setxattr). Оно указывает, что операция должна заменить существующий атрибут.18151816## 16.1.6. Управление процессами18171818Эти функции можно использовать для создания процессов и управления ими.18191820Различные функции [`exec*`](https://python-all.ru/3.5/library/os.html#os.execl) принимают список аргументов для новой программы, загружаемой в процесс. В каждом случае первый аргумент передаётся новой программе как её собственное имя, а не как аргумент, который пользователь мог бы ввести в командной строке. Для программиста на C это `argv[0]`, передаваемый в `main()` программы. Например, `os.execv('/bin/echo', ['foo', 'bar'])` выведет на стандартный вывод только `bar`; `foo` будет проигнорирован.18211822#### `os.abort()`18231824Генерирует сигнал `SIGABRT` для текущего процесса. На Unix поведение по умолчанию – создание дампа памяти; на Windows процесс немедленно возвращает код завершения `3`. Имейте в виду, что вызов этой функции не вызовет обработчик сигнала Python, зарегистрированный для `SIGABRT` с помощью [`signal.signal()`](https://python-all.ru/3.5/library/signal.html#signal.signal).18251826#### `os.execl(path, arg0, arg1, ...)`18271828#### `os.execle(path, arg0, arg1, ..., env)`18291830#### `os.execlp(file, arg0, arg1, ...)`18311832#### `os.execlpe(file, arg0, arg1, ..., env)`18331834#### `os.execv(path, args)`18351836#### `os.execve(path, args, env)`18371838#### `os.execvp(file, args)`18391840#### `os.execvpe(file, args, env)`18411842Все эти функции выполняют новую программу, заменяя текущий процесс; они не возвращают управление. В Unix новый исполняемый файл загружается в текущий процесс и получает тот же идентификатор процесса, что и вызывающий. Ошибки сообщаются как исключения [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError).18431844Текущий процесс заменяется немедленно. Открытые файловые объекты и дескрипторы не сбрасываются, поэтому если на этих открытых файлах могут быть буферизованные данные, следует сбросить их с помощью `sys.stdout.flush()` или [`os.fsync()`](https://python-all.ru/3.5/library/os.html#os.fsync) перед вызовом функции [`exec*`](https://python-all.ru/3.5/library/os.html#os.execl).18451846Варианты с буквами «l» и «v» функций [`exec*`](https://python-all.ru/3.5/library/os.html#os.execl) различаются способом передачи аргументов командной строки. Варианты «l», пожалуй, проще в использовании, если количество параметров фиксировано на момент написания кода: отдельные параметры просто становятся дополнительными аргументами функций `execl*()`. Варианты «v» удобны, когда количество параметров переменное: аргументы передаются в виде списка или кортежа как параметр *args*. В любом случае аргументы дочернего процесса должны начинаться с имени выполняемой команды, хотя это и не принудительно.18471848Варианты, содержащие "p" ближе к концу ([`execlp()`](https://python-all.ru/3.5/library/os.html#os.execlp), [`execlpe()`](https://python-all.ru/3.5/library/os.html#os.execlpe), [`execvp()`](https://python-all.ru/3.5/library/os.html#os.execvp) и [`execvpe()`](https://python-all.ru/3.5/library/os.html#os.execvpe)), используют переменную окружения `PATH` для поиска *файла* программы. При замене окружения (с помощью одного из вариантов [`exec*e`](https://python-all.ru/3.5/library/os.html#os.execl), обсуждаемых в следующем абзаце) новая среда используется как источник переменной `PATH`. Остальные варианты, [`execl()`](https://python-all.ru/3.5/library/os.html#os.execl), [`execle()`](https://python-all.ru/3.5/library/os.html#os.execle), [`execv()`](https://python-all.ru/3.5/library/os.html#os.execv) и [`execve()`](https://python-all.ru/3.5/library/os.html#os.execve), не используют переменную `PATH` для поиска исполняемого файла; *path* должен содержать правильный абсолютный или относительный путь.18491850Для [`execle()`](https://python-all.ru/3.5/library/os.html#os.execle), [`execlpe()`](https://python-all.ru/3.5/library/os.html#os.execlpe), [`execve()`](https://python-all.ru/3.5/library/os.html#os.execve) и [`execvpe()`](https://python-all.ru/3.5/library/os.html#os.execvpe) (обратите внимание, что все они заканчиваются на «e») параметр *env* должен быть отображением, используемым для определения переменных окружения нового процесса (они используются вместо окружения текущего процесса); функции [`execl()`](https://python-all.ru/3.5/library/os.html#os.execl), [`execlp()`](https://python-all.ru/3.5/library/os.html#os.execlp), [`execv()`](https://python-all.ru/3.5/library/os.html#os.execv) и [`execvp()`](https://python-all.ru/3.5/library/os.html#os.execvp) заставляют новый процесс наследовать окружение текущего процесса.18511852Для [`execve()`](https://python-all.ru/3.5/library/os.html#os.execve) на некоторых платформах *path* также может быть указан в виде открытого файлового дескриптора. Эта функциональность может не поддерживаться на вашей платформе; можно проверить, доступна ли она, с помощью [`os.supports_fd`](https://python-all.ru/3.5/library/os.html#os.supports_fd). Если она недоступна, её использование вызовет [`NotImplementedError`](https://python-all.ru/3.5/library/exceptions.html#NotImplementedError).18531854Доступность: Unix, Windows.18551856Новое в версии 3.3: добавлена поддержка указания открытого файлового дескриптора для *path* для [`execve()`](https://python-all.ru/3.5/library/os.html#os.execve).18571858#### `os._exit(n)`18591860Завершает процесс с кодом *n*, без вызова обработчиков очистки, сброса буферов stdio и т.д.18611862> **Примечание**1863>1864> Стандартный способ завершения – `sys.exit(n)`. [`_exit()`](https://python-all.ru/3.5/library/os.html#os._exit) обычно следует использовать только в дочернем процессе после [`fork()`](https://python-all.ru/3.5/library/os.html#os.fork).18651866Определены следующие коды завершения, которые можно использовать с [`_exit()`](https://python-all.ru/3.5/library/os.html#os._exit), хотя они не обязательны. Обычно они используются для системных программ, написанных на Python, например, для внешней программы доставки команд почтового сервера.18671868> **Примечание**1869>1870> Некоторые из них могут быть недоступны на всех платформах Unix, поскольку есть различия. Эти константы определены там, где они определены базовой платформой.18711872#### `os.EX_OK`18731874Код завершения, означающий, что ошибок не возникло.18751876Доступность: Unix.18771878#### `os.EX_USAGE`18791880Код завершения, означающий, что команда была использована неправильно, например, когда передано неверное количество аргументов.18811882Доступность: Unix.18831884#### `os.EX_DATAERR`18851886Код завершения, означающий, что входные данные были некорректны.18871888Доступность: Unix.18891890#### `os.EX_NOINPUT`18911892Код завершения, означающий, что входной файл не существовал или не был доступен для чтения.18931894Доступность: Unix.18951896#### `os.EX_NOUSER`18971898Код завершения, означающий, что указанный пользователь не существовал.18991900Доступность: Unix.19011902#### `os.EX_NOHOST`19031904Код завершения, означающий, что указанный хост не существовал.19051906Доступность: Unix.19071908#### `os.EX_UNAVAILABLE`19091910Код завершения, означающий, что требуемая служба недоступна.19111912Доступность: Unix.19131914#### `os.EX_SOFTWARE`19151916Код завершения, означающий, что обнаружена внутренняя программная ошибка.19171918Доступность: Unix.19191920#### `os.EX_OSERR`19211922Код завершения, означающий, что обнаружена ошибка операционной системы, например, невозможность выполнить fork или создать канал.19231924Доступность: Unix.19251926#### `os.EX_OSFILE`19271928Код завершения, означающий, что некоторый системный файл не существовал, не мог быть открыт или содержал ошибку другого рода.19291930Доступность: Unix.19311932#### `os.EX_CANTCREAT`19331934Код завершения, означающий, что указанный пользователем выходной файл не удалось создать.19351936Доступность: Unix.19371938#### `os.EX_IOERR`19391940Код выхода, означающий ошибку ввода-вывода при работе с каким-то файлом.19411942Доступность: Unix.19431944#### `os.EX_TEMPFAIL`19451946Код выхода, означающий временный сбой. Указывает на ситуацию, которая может и не быть ошибкой – например, на невозможность установить сетевое соединение при повторяемой операции.19471948Доступность: Unix.19491950#### `os.EX_PROTOCOL`19511952Код выхода, означающий, что обмен по протоколу был недопустимым, недействительным или нераспознанным.19531954Доступность: Unix.19551956#### `os.EX_NOPERM`19571958Код выхода, сообщающий о недостаточных правах для выполнения операции (не относится к проблемам файловой системы).19591960Доступность: Unix.19611962#### `os.EX_CONFIG`19631964Код выхода, указывающий на ошибку конфигурации.19651966Доступность: Unix.19671968#### `os.EX_NOTFOUND`19691970Код выхода, означающий нечто вроде «запись не найдена».19711972Доступность: Unix.19731974#### `os.fork()`19751976Порождает дочерний процесс. Возвращает `0` в дочернем процессе и идентификатор дочернего процесса в родительском. При возникновении ошибки возбуждается [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError).19771978Обратите внимание, что на некоторых платформах, включая FreeBSD \<= 6.3 и Cygwin, есть известные проблемы при использовании fork() из потока.19791980> **Предупреждение**1981>1982> См. [`ssl`](https://python-all.ru/3.5/library/ssl.html#module-ssl) для приложений, использующих модуль SSL с fork().19831984Доступность: Unix.19851986#### `os.forkpty()`19871988Создаёт дочерний процесс, используя новый псевдотерминал в качестве управляющего терминала дочернего процесса. Возвращает пару `(pid, fd)`, где *pid* равен `0` в дочернем процессе, а в родительском – идентификатор нового дочернего процесса, и *fd* – это файловый дескриптор ведущего конца псевдотерминала. Для более переносимого подхода используйте модуль [`pty`](https://python-all.ru/3.5/library/pty.html#module-pty). Если возникает ошибка, возбуждается [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError).19891990Доступность: некоторые разновидности Unix.19911992#### `os.kill(pid, sig)`19931994Отправляет сигнал *sig* процессу *pid*. Константы для конкретных сигналов, доступных на хост-платформе, определены в модуле [`signal`](https://python-all.ru/3.5/library/signal.html#module-signal).19951996Windows: Сигналы [`signal.CTRL_C_EVENT`](https://python-all.ru/3.5/library/signal.html#signal.CTRL_C_EVENT) и [`signal.CTRL_BREAK_EVENT`](https://python-all.ru/3.5/library/signal.html#signal.CTRL_BREAK_EVENT) – это специальные сигналы, которые можно отправлять только консольным процессам, имеющим общее окно консоли, например, некоторым подпроцессам. Любое другое значение *sig* приведет к безусловному завершению процесса через API TerminateProcess, а код возврата будет установлен в *sig*. Версия [`kill()`](https://python-all.ru/3.5/library/os.html#os.kill) для Windows дополнительно принимает дескрипторы процессов для завершения.19971998См. также [`signal.pthread_kill()`](https://python-all.ru/3.5/library/signal.html#signal.pthread_kill).19992000Новое в версии 3.2: Поддержка Windows.20012002#### `os.killpg(pgid, sig)`20032004Отправить сигнал *sig* группе процессов *pgid*.20052006Доступность: Unix.20072008#### `os.nice(increment)`20092010Добавить *increment* к «приоритету» процесса. Возвращает новый приоритет.20112012Доступность: Unix.20132014#### `os.plock(op)`20152016Блокирует сегменты программы в памяти. Значение *op* (определённое в `<sys/lock.h>`) определяет, какие сегменты блокируются.20172018Доступность: Unix.20192020#### `os.popen(cmd, mode='r', buffering=-1)`20212022Открывает канал для связи с командой *cmd*. Возвращаемое значение – открытый файловый объект, подключённый к каналу, который можно читать или записывать в зависимости от того, является ли *mode* равным `'r'` (по умолчанию) или `'w'`. Аргумент *buffering* имеет тот же смысл, что соответствующий аргумент встроенной функции [`open()`](https://python-all.ru/3.5/library/functions.html#open). Возвращаемый файловый объект читает или записывает текстовые строки, а не байты.20232024Метод `close` возвращает [`None`](https://python-all.ru/3.5/library/constants.html#None), если подпроцесс завершился успешно, или код возврата подпроцесса в случае ошибки. В системах POSIX, если код возврата положительный, он представляет собой возвращаемое значение процесса, сдвинутое влево на один байт. Если код возврата отрицательный, процесс был завершён сигналом, соответствующим отрицательному значению кода возврата. (Например, возвращаемое значение может быть `- signal.SIGKILL`, если подпроцесс был убит.) В системах Windows возвращаемое значение содержит знаковый целочисленный код возврата дочернего процесса.20252026Это реализовано с помощью [`subprocess.Popen`](https://python-all.ru/3.5/library/subprocess.html#subprocess.Popen); обратитесь к документации этого класса для получения более мощных способов управления подпроцессами и общения с ними.20272028#### `os.spawnl(mode, path, ...)`20292030#### `os.spawnle(mode, path, ..., env)`20312032#### `os.spawnlp(mode, file, ...)`20332034#### `os.spawnlpe(mode, file, ..., env)`20352036#### `os.spawnv(mode, path, args)`20372038#### `os.spawnve(mode, path, args, env)`20392040#### `os.spawnvp(mode, file, args)`20412042#### `os.spawnvpe(mode, file, args, env)`20432044Выполняет программу *path* в новом процессе.20452046(Обратите внимание, что модуль [`subprocess`](https://python-all.ru/3.5/library/subprocess.html#module-subprocess) предоставляет более мощные средства для создания новых процессов и получения их результатов; использование этого модуля предпочтительнее, чем использование этих функций. Особенно см. раздел [Замена старых функций модулем subprocess](https://python-all.ru/3.5/library/subprocess.html#subprocess-replacements).)20472048Если *mode* равен [`P_NOWAIT`](https://python-all.ru/3.5/library/os.html#os.P_NOWAIT), эта функция возвращает идентификатор нового процесса; если *mode* равен [`P_WAIT`](https://python-all.ru/3.5/library/os.html#os.P_WAIT), возвращает код выхода процесса, если он завершился нормально, или `-signal`, где *signal* – сигнал, который завершил процесс. В Windows идентификатор процесса на самом деле является дескриптором процесса, поэтому его можно использовать с функцией [`waitpid()`](https://python-all.ru/3.5/library/os.html#os.waitpid).20492050Варианты «l» и «v» функций [`spawn*`](https://python-all.ru/3.5/library/os.html#os.spawnl) различаются способом передачи аргументов командной строки. Варианты «l», возможно, проще в использовании, если количество параметров фиксировано на момент написания кода; отдельные параметры просто становятся дополнительными параметрами функций `spawnl*()`. Варианты «v» удобны, когда количество параметров переменное, и аргументы передаются в виде списка или кортежа через параметр *args*. В любом случае, аргументы дочернего процесса должны начинаться с имени выполняемой команды.20512052Варианты, содержащие вторую «p» в конце ([`spawnlp()`](https://python-all.ru/3.5/library/os.html#os.spawnlp), [`spawnlpe()`](https://python-all.ru/3.5/library/os.html#os.spawnlpe), [`spawnvp()`](https://python-all.ru/3.5/library/os.html#os.spawnvp) и [`spawnvpe()`](https://python-all.ru/3.5/library/os.html#os.spawnvpe)), используют переменную окружения `PATH` для поиска программы *file*. При замене окружения (с помощью одного из вариантов [`spawn*e`](https://python-all.ru/3.5/library/os.html#os.spawnl), обсуждаемых в следующем абзаце) новое окружение используется как источник переменной `PATH`. Другие варианты, [`spawnl()`](https://python-all.ru/3.5/library/os.html#os.spawnl), [`spawnle()`](https://python-all.ru/3.5/library/os.html#os.spawnle), [`spawnv()`](https://python-all.ru/3.5/library/os.html#os.spawnv) и [`spawnve()`](https://python-all.ru/3.5/library/os.html#os.spawnve), не используют переменную `PATH` для поиска исполняемого файла; *path* должен содержать подходящий абсолютный или относительный путь.20532054Для [`spawnle()`](https://python-all.ru/3.5/library/os.html#os.spawnle), [`spawnlpe()`](https://python-all.ru/3.5/library/os.html#os.spawnlpe), [`spawnve()`](https://python-all.ru/3.5/library/os.html#os.spawnve) и [`spawnvpe()`](https://python-all.ru/3.5/library/os.html#os.spawnvpe) (обратите внимание, все они заканчиваются на «e») параметр *env* должен быть отображением, которое используется для определения переменных окружения нового процесса (они используются вместо окружения текущего процесса); функции [`spawnl()`](https://python-all.ru/3.5/library/os.html#os.spawnl), [`spawnlp()`](https://python-all.ru/3.5/library/os.html#os.spawnlp), [`spawnv()`](https://python-all.ru/3.5/library/os.html#os.spawnv) и [`spawnvp()`](https://python-all.ru/3.5/library/os.html#os.spawnvp) заставляют новый процесс наследовать окружение текущего процесса. Обратите внимание, что ключи и значения в словаре *env* должны быть строками; недопустимые ключи или значения приведут к ошибке функции с возвращаемым значением `127`.20552056В качестве примера следующие вызовы [`spawnlp()`](https://python-all.ru/3.5/library/os.html#os.spawnlp) и [`spawnvpe()`](https://python-all.ru/3.5/library/os.html#os.spawnvpe) эквивалентны:20572058```python2059import os2060os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null')20612062L = ['cp', 'index.html', '/dev/null']2063os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)2064```20652066Доступность: Unix, Windows. [`spawnlp()`](https://python-all.ru/3.5/library/os.html#os.spawnlp), [`spawnlpe()`](https://python-all.ru/3.5/library/os.html#os.spawnlpe), [`spawnvp()`](https://python-all.ru/3.5/library/os.html#os.spawnvp)\\nи [`spawnvpe()`](https://python-all.ru/3.5/library/os.html#os.spawnvpe) недоступны в Windows. [`spawnle()`](https://python-all.ru/3.5/library/os.html#os.spawnle) и\\n[`spawnve()`](https://python-all.ru/3.5/library/os.html#os.spawnve) не являются потокобезопасными в Windows; рекомендуется использовать\\nмодуль [`subprocess`](https://python-all.ru/3.5/library/subprocess.html#module-subprocess).20672068#### `os.P_NOWAIT`20692070#### `os.P_NOWAITO`20712072Возможные значения параметра *mode* для семейства функций [`spawn*`](https://python-all.ru/3.5/library/os.html#os.spawnl). Если указано любое из этих значений, функции `spawn*()` возвращаются сразу после создания нового процесса, возвращая его идентификатор в качестве возвращаемого значения.20732074Доступность: Unix, Windows.20752076#### `os.P_WAIT`20772078Возможное значение параметра *mode* для семейства функций [`spawn*`](https://python-all.ru/3.5/library/os.html#os.spawnl). Если указано это значение как *mode*, функции `spawn*()` не вернутся, пока новый процесс не завершится, и вернут код выхода процесса в случае успешного завершения, или `-signal`, если сигнал завершит процесс.20792080Доступность: Unix, Windows.20812082#### `os.P_DETACH`20832084#### `os.P_OVERLAY`20852086Возможные значения параметра *mode* для семейства функций [`spawn*`](https://python-all.ru/3.5/library/os.html#os.spawnl). Они менее переносимы, чем перечисленные выше. [`P_DETACH`](https://python-all.ru/3.5/library/os.html#os.P_DETACH) аналогичен [`P_NOWAIT`](https://python-all.ru/3.5/library/os.html#os.P_NOWAIT), но новый процесс отсоединяется от консоли вызывающего процесса. Если используется [`P_OVERLAY`](https://python-all.ru/3.5/library/os.html#os.P_OVERLAY), текущий процесс будет заменён; функция [`spawn*`](https://python-all.ru/3.5/library/os.html#os.spawnl) не вернётся.20872088Доступность: Windows.20892090#### `os.startfile(path[, operation])`20912092Запускает файл в связанном с ним приложении.20932094Если *operation* не указан или равен `'open'`, это работает как двойной щелчок по файлу в Проводнике Windows или передача имени файла в качестве аргумента команде **start** из интерактивной командной строки: файл открывается с помощью приложения, связанного с его расширением (если такое есть).20952096Если указана другая *operation*, она должна быть «глаголом команды» (command verb), определяющим, что делать с файлом. Распространённые глаголы, задокументированные Microsoft: `'print'` и `'edit'` (используются для файлов), а также `'explore'` и `'find'` (используются для каталогов).20972098[`startfile()`](https://python-all.ru/3.5/library/os.html#os.startfile) возвращается сразу после запуска соответствующего приложения. Невозможно дождаться закрытия приложения или получить его код возврата. Параметр *path* задаётся относительно текущего каталога. Если требуется использовать абсолютный путь, убедитесь, что первый символ не является косой чертой (`'/'`); в противном случае базовая функция Win32 `ShellExecute()` не сработает. Используйте функцию [`os.path.normpath()`](https://python-all.ru/3.5/library/os.path.html#os.path.normpath), чтобы путь был правильно закодирован для Win32.20992100Чтобы снизить накладные расходы на запуск интерпретатора, функция Win32 `ShellExecute()` не разрешается до первого вызова данной функции. Если функцию не удаётся разрешить, будет возбуждено [`NotImplementedError`](https://python-all.ru/3.5/library/exceptions.html#NotImplementedError).21012102Доступность: Windows.21032104#### `os.system(command)`21052106Выполняет команду (строку) в подпроцессе. Реализовано вызовом стандартной функции C `system()`, и имеет те же ограничения. Изменения в [`sys.stdin`](https://python-all.ru/3.5/library/sys.html#sys.stdin) и т.д. не отражаются в окружении выполняемой команды. Если *command* выводит какие-либо данные, они направляются в стандартный поток вывода интерпретатора.21072108В Unix возвращаемое значение – это код завершения процесса, закодированный в формате, указанном для [`wait()`](https://python-all.ru/3.5/library/os.html#os.wait). Обратите внимание, что POSIX не определяет значение возвращаемого значения функции C `system()`, поэтому возвращаемое значение функции Python зависит от системы.21092110В Windows возвращаемое значение – это значение, возвращаемое системной оболочкой после выполнения *command*. Оболочка задаётся переменной окружения Windows `COMSPEC`: обычно это **cmd.exe**, которая возвращает статус выхода выполненной команды; в системах, использующих нестандартную оболочку, обратитесь к документации вашей оболочки.21112112Модуль [`subprocess`](https://python-all.ru/3.5/library/subprocess.html#module-subprocess) предоставляет более мощные средства для порождения новых процессов и получения их результатов; предпочтительнее использовать этот модуль, а не данную функцию. Смотрите раздел [Замена старых функций модулем subprocess](https://python-all.ru/3.5/library/subprocess.html#subprocess-replacements) в документации [`subprocess`](https://python-all.ru/3.5/library/subprocess.html#module-subprocess), где приведены полезные рецепты.21132114Доступность: Unix, Windows.21152116#### `os.times()`21172118Возвращает текущие глобальные времена процесса. Возвращаемое значение – объект с пятью атрибутами:21192120- `user` – пользовательское время2121- [`system`](https://python-all.ru/3.5/library/os.html#os.system) – системное время2122- `children_user` – пользовательское время всех дочерних процессов2123- `children_system` – системное время всех дочерних процессов2124- `elapsed` – прошедшее реальное время с фиксированной точки в прошлом21252126Для обратной совместимости этот объект также ведёт себя как кортеж из пяти элементов, содержащий `user`, [`system`](https://python-all.ru/3.5/library/os.html#os.system), `children_user`, `children_system` и `elapsed` в указанном порядке.21272128См. страницу руководства Unix\\n*times(2)* или соответствующую документацию Windows Platform API.\\nВ Windows известны только `user` и [`system`](https://python-all.ru/3.5/library/os.html#os.system); остальные\\nатрибуты равны нулю.21292130Доступность: Unix, Windows.21312132Изменено в версии 3.3: Тип возвращаемого значения изменён с кортежа на кортежеподобный объект с именованными атрибутами.21332134#### `os.wait()`21352136Ожидает завершения дочернего процесса и возвращает кортеж, содержащий его PID и индикатор статуса выхода: 16-битное число, младший байт которого – номер сигнала, завершившего процесс, а старший байт – статус выхода (если номер сигнала равен нулю); старший бит младшего байта установлен, если был создан файл core.21372138Доступность: Unix.21392140#### `os.waitid(idtype, id, options)`21412142Ожидает завершения одного или нескольких дочерних процессов. *idtype* может быть [`P_PID`](https://python-all.ru/3.5/library/os.html#os.P_PID), [`P_PGID`](https://python-all.ru/3.5/library/os.html#os.P_PGID) или [`P_ALL`](https://python-all.ru/3.5/library/os.html#os.P_ALL). *id* задаёт pid для ожидания. *options* формируется путём логического сложения (OR) одного или нескольких из [`WEXITED`](https://python-all.ru/3.5/library/os.html#os.WEXITED), [`WSTOPPED`](https://python-all.ru/3.5/library/os.html#os.WSTOPPED) или [`WCONTINUED`](https://python-all.ru/3.5/library/os.html#os.WCONTINUED), а также может быть объединён с [`WNOHANG`](https://python-all.ru/3.5/library/os.html#os.WNOHANG) или [`WNOWAIT`](https://python-all.ru/3.5/library/os.html#os.WNOWAIT). Возвращаемое значение – объект, представляющий данные, содержащиеся в структуре `siginfo_t`, а именно: `si_pid`, `si_uid`, `si_signo`, `si_status`, `si_code` или `None`, если указан [`WNOHANG`](https://python-all.ru/3.5/library/os.html#os.WNOHANG) и нет дочерних процессов в состоянии ожидания.21432144Доступность: Unix.21452146Новое в версии 3.3.21472148#### `os.P_PID`21492150#### `os.P_PGID`21512152#### `os.P_ALL`21532154Это возможные значения для *idtype* в [`waitid()`](https://python-all.ru/3.5/library/os.html#os.waitid). Они влияют на интерпретацию *id*.21552156Доступность: Unix.21572158Новое в версии 3.3.21592160#### `os.WEXITED`21612162#### `os.WSTOPPED`21632164#### `os.WNOWAIT`21652166Флаги, которые можно использовать в *options* в [`waitid()`](https://python-all.ru/3.5/library/os.html#os.waitid) для указания ожидаемого сигнала дочернего процесса.21672168Доступность: Unix.21692170Новое в версии 3.3.21712172#### `os.CLD_EXITED`21732174#### `os.CLD_DUMPED`21752176#### `os.CLD_TRAPPED`21772178#### `os.CLD_CONTINUED`21792180Это возможные значения для `si_code` в результате, возвращаемом [`waitid()`](https://python-all.ru/3.5/library/os.html#os.waitid).21812182Доступность: Unix.21832184Новое в версии 3.3.21852186#### `os.waitpid(pid, options)`21872188Подробности этой функции различаются в Unix и Windows.21892190В Unix: ожидает завершения дочернего процесса, заданного идентификатором процесса *pid*, и возвращает кортеж, содержащий его идентификатор процесса и индикатор статуса завершения (закодированный как для [`wait()`](https://python-all.ru/3.5/library/os.html#os.wait)). Семантика вызова зависит от значения целочисленного параметра *options*, который должен быть `0` для нормальной работы.21912192Если *pid* больше `0`, [`waitpid()`](https://python-all.ru/3.5/library/os.html#os.waitpid) запрашивает информацию о состоянии для этого конкретного процесса. Если *pid* равен `0`, запрос выполняется для состояния любого дочернего процесса в группе процессов текущего процесса. Если *pid* равен `-1`, запрос относится к любому дочернему процессу текущего процесса. Если *pid* меньше `-1`, запрашивается состояние для любого процесса в группе процессов `-pid` (абсолютное значение *pid*).21932194Возбуждается [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError) со значением errno, когда системный вызов возвращает -1.21952196В Windows: ожидает завершения процесса, заданного дескриптором процесса *pid*, и возвращает кортеж, содержащий *pid* и его статус завершения, сдвинутый влево на 8 бит (сдвиг упрощает кроссплатформенное использование функции). *pid*, меньший или равный `0`, не имеет особого смысла в Windows и вызывает исключение. Значение целочисленного параметра *options* не влияет на результат. *pid* может относиться к любому процессу, чей идентификатор известен, не обязательно дочернему. Функции [`spawn*`](https://python-all.ru/3.5/library/os.html#os.spawnl), вызванные с [`P_NOWAIT`](https://python-all.ru/3.5/library/os.html#os.P_NOWAIT), возвращают подходящие дескрипторы процессов.21972198Изменено в версии 3.5: Если системный вызов был прерван и обработчик сигнала не возбуждает исключение, функция теперь повторяет системный вызов вместо возбуждения исключения [`InterruptedError`](https://python-all.ru/3.5/library/exceptions.html#InterruptedError) (см. [**PEP 475**](https://python-all.ru/3.5/library/os.html) для обоснования).21992200#### `os.wait3(options)`22012202Аналогично [`waitpid()`](https://python-all.ru/3.5/library/os.html#os.waitpid), но без аргумента с идентификатором процесса; возвращается кортеж из трёх элементов, содержащий идентификатор процесса дочернего процесса, индикацию статуса завершения и информацию об использовании ресурсов. За подробностями об информации об использовании ресурсов обратитесь к [`resource`](https://python-all.ru/3.5/library/resource.html#module-resource).[`getrusage()`](https://python-all.ru/3.5/library/resource.html#resource.getrusage). Аргумент option совпадает с тем, что передаётся в [`waitpid()`](https://python-all.ru/3.5/library/os.html#os.waitpid) и [`wait4()`](https://python-all.ru/3.5/library/os.html#os.wait4).22032204Доступность: Unix.22052206#### `os.wait4(pid, options)`22072208Аналогично [`waitpid()`](https://python-all.ru/3.5/library/os.html#os.waitpid), за исключением того, что возвращается кортеж из трех элементов, содержащий идентификатор дочернего процесса, индикатор статуса завершения и информацию об использовании ресурсов. Обратитесь к [`resource`](https://python-all.ru/3.5/library/resource.html#module-resource).[`getrusage()`](https://python-all.ru/3.5/library/resource.html#resource.getrusage) для получения подробной информации об использовании ресурсов. Аргументы [`wait4()`](https://python-all.ru/3.5/library/os.html#os.wait4) такие же, как те, что передаются в [`waitpid()`](https://python-all.ru/3.5/library/os.html#os.waitpid).22092210Доступность: Unix.22112212#### `os.WNOHANG`22132214Опция для [`waitpid()`](https://python-all.ru/3.5/library/os.html#os.waitpid), позволяющая вернуть результат немедленно, если статус дочернего процесса недоступен. В этом случае функция возвращает `(0, 0)`.22152216Доступность: Unix.22172218#### `os.WCONTINUED`22192220Эта опция позволяет сообщать о дочерних процессах, если они были возобновлены после остановки управления заданием с момента последнего сообщения их статуса.22212222Доступность: некоторые системы Unix.22232224#### `os.WUNTRACED`22252226Этот параметр заставляет сообщать о дочерних процессах, если они были остановлены, но их текущее состояние ещё не было сообщено с момента остановки.22272228Доступность: Unix.22292230Следующие функции принимают код состояния процесса, возвращаемый [`system()`](https://python-all.ru/3.5/library/os.html#os.system), [`wait()`](https://python-all.ru/3.5/library/os.html#os.wait) или [`waitpid()`](https://python-all.ru/3.5/library/os.html#os.waitpid), в качестве параметра. Они могут использоваться для определения статуса процесса.22312232#### `os.WCOREDUMP(status)`22332234Возвращает `True`, если для процесса был создан дамп ядра, в противном случае возвращает `False`.22352236Доступность: Unix.22372238#### `os.WIFCONTINUED(status)`22392240Возвращает `True`, если процесс был продолжен после остановки управления заданиями, иначе возвращает `False`.22412242Доступность: Unix.22432244#### `os.WIFSTOPPED(status)`22452246Возвращает `True`, если процесс был остановлен, иначе возвращает `False`.22472248Доступность: Unix.22492250#### `os.WIFSIGNALED(status)`22512252Возвращает `True`, если процесс завершился из-за сигнала, иначе возвращает `False`.22532254Доступность: Unix.22552256#### `os.WIFEXITED(status)`22572258Возвращает `True`, если процесс завершился с помощью системного вызова *exit(2)*, иначе возвращает `False`.22592260Доступность: Unix.22612262#### `os.WEXITSTATUS(status)`22632264Если `WIFEXITED(status)` истинно, возвращает целочисленный параметр системного вызова *exit(2)*. В противном случае возвращаемое значение не имеет смысла.22652266Доступность: Unix.22672268#### `os.WSTOPSIG(status)`22692270Возвращает сигнал, который вызвал остановку процесса.22712272Доступность: Unix.22732274#### `os.WTERMSIG(status)`22752276Возвращает сигнал, который вызвал завершение процесса.22772278Доступность: Unix.22792280## 16.1.7. Интерфейс планировщика22812282Эти функции управляют тем, как операционная система выделяет процессу время CPU. Они доступны только на некоторых платформах Unix. За более подробной информацией обращайтесь к man-страницам Unix.22832284Новое в версии 3.3.22852286Следующие политики планирования доступны, если они поддерживаются операционной системой.22872288#### `os.SCHED_OTHER`22892290Политика планирования по умолчанию.22912292#### `os.SCHED_BATCH`22932294Политика планирования для процессов с интенсивными вычислениями, которая старается сохранить интерактивность на остальной части компьютера.22952296#### `os.SCHED_IDLE`22972298Политика планирования для фоновых задач с очень низким приоритетом.22992300#### `os.SCHED_SPORADIC`23012302Политика планирования для спорадических серверных программ.23032304#### `os.SCHED_FIFO`23052306Политика планирования «первым пришёл, первым обслужен».23072308#### `os.SCHED_RR`23092310Циклическая политика планирования.23112312#### `os.SCHED_RESET_ON_FORK`23132314Этот флаг можно объединить с любой другой политикой планирования с помощью ИЛИ. Когда процесс с установленным этим флагом порождает потомка, политика планирования и приоритет дочернего процесса сбрасываются на значения по умолчанию.23152316#### `class os.sched_param(sched_priority)`23172318Этот класс представляет настраиваемые параметры планирования, используемые в [`sched_setparam()`](https://python-all.ru/3.5/library/os.html#os.sched_setparam), [`sched_setscheduler()`](https://python-all.ru/3.5/library/os.html#os.sched_setscheduler) и [`sched_getparam()`](https://python-all.ru/3.5/library/os.html#os.sched_getparam). Он неизменяем.23192320В настоящее время существует только один возможный параметр:23212322#### `sched_priority`23232324Приоритет планирования для политики планирования.23252326#### `os.sched_get_priority_min(policy)`23272328Возвращает минимальное значение приоритета для *policy*. *policy* – одна из констант политик планирования, описанных выше.23292330#### `os.sched_get_priority_max(policy)`23312332Возвращает максимальное значение приоритета для *policy*. *policy* – одна из констант политик планирования, описанных выше.23332334#### `os.sched_setscheduler(pid, policy, param)`23352336Устанавливает политику планирования для процесса с PID *pid*. Значение *pid*, равное 0, означает вызывающий процесс. *policy* – одна из констант политик планирования, описанных выше. *param* – экземпляр [`sched_param`](https://python-all.ru/3.5/library/os.html#os.sched_param).23372338#### `os.sched_getscheduler(pid)`23392340Возвращает политику планирования для процесса с PID *pid*. Значение *pid*, равное 0, означает вызывающий процесс. Результат – одна из констант политик планирования, описанных выше.23412342#### `os.sched_setparam(pid, param)`23432344Устанавливает параметры планирования для процесса с PID *pid*. Значение *pid*, равное 0, означает текущий процесс. *param* – это экземпляр [`sched_param`](https://python-all.ru/3.5/library/os.html#os.sched_param).23452346#### `os.sched_getparam(pid)`23472348Возвращает параметры планирования в виде экземпляра [`sched_param`](https://python-all.ru/3.5/library/os.html#os.sched_param) для процесса с PID *pid*. Значение *pid*, равное 0, означает вызывающий процесс.23492350#### `os.sched_rr_get_interval(pid)`23512352Возвращает квант времени (round-robin) в секундах для процесса с PID *pid*. Значение *pid*, равное 0, означает вызывающий процесс.23532354#### `os.sched_yield()`23552356Добровольно освобождает процессор.23572358#### `os.sched_setaffinity(pid, mask)`23592360Ограничивает процесс с PID *pid* (или текущий процесс, если ноль) набором процессоров. Параметр *mask* – это итерируемый объект с целыми числами, представляющий набор процессоров, к которому следует привязать процесс.23612362#### `os.sched_getaffinity(pid)`23632364Возвращает набор процессоров, к которым ограничен процесс с PID *pid* (или текущий процесс, если ноль).23652366## 16.1.8. Разная системная информация23672368#### `os.confstr(name)`23692370Возвращает строковые значения системной конфигурации. *name* задаёт извлекаемое значение; это может быть строка – имя определённого системного значения; такие имена заданы в ряде стандартов (POSIX, Unix 95, Unix 98 и других). На некоторых платформах определены и дополнительные имена. Имена, известные хост-операционной системе, представлены в виде ключей словаря `confstr_names`. Для тех переменных конфигурации, которых нет в этом отображении, также допускается передавать целое число в качестве *name*.23712372Если значение конфигурации, указанное *name*, не определено, возвращается `None`.23732374Если *name* – строка и не известна, возбуждается исключение [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError). Если конкретное значение для *name* не поддерживается хост-системой, даже если оно присутствует в `confstr_names`, возбуждается исключение [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError) с [`errno.EINVAL`](https://python-all.ru/3.5/library/errno.html#errno.EINVAL) в качестве кода ошибки.23752376Доступность: Unix.23772378#### `os.confstr_names`23792380Словарь, отображающий имена, принимаемые [`confstr()`](https://python-all.ru/3.5/library/os.html#os.confstr), в целочисленные значения, определённые для этих имён хост-операционной системой. Может использоваться для определения набора имён, известных системе.23812382Доступность: Unix.23832384#### `os.cpu_count()`23852386Возвращает количество процессоров в системе. Возвращает `None`, если не определено.23872388Новое в версии 3.4.23892390#### `os.getloadavg()`23912392Возвращает количество процессов в очереди выполнения системы, усреднённое за последние 1, 5 и 15 минут, или возбуждает исключение [`OSError`](https://python-all.ru/3.5/library/exceptions.html#OSError), если среднюю нагрузку получить не удалось.23932394Доступность: Unix.23952396#### `os.sysconf(name)`23972398Возвращает целочисленные значения системной конфигурации. Если значение конфигурации, указанное *name*, не определено, возвращается `-1`. Замечания относительно параметра *name* для [`confstr()`](https://python-all.ru/3.5/library/os.html#os.confstr) применимы и здесь; словарь, предоставляющий информацию об известных именах, задаётся `sysconf_names`.23992400Доступность: Unix.24012402#### `os.sysconf_names`24032404Словарь, отображающий имена, принимаемые [`sysconf()`](https://python-all.ru/3.5/library/os.html#os.sysconf), в целочисленные значения, определённые для этих имён хост-операционной системой. Может использоваться для определения набора имён, известных системе.24052406Доступность: Unix.24072408Следующие значения данных используются для поддержки операций с путями. Они определены для всех платформ.24092410Операции более высокого уровня с именами путей определены в модуле [`os.path`](https://python-all.ru/3.5/library/os.path.html#module-os.path).24112412#### `os.curdir`24132414Строковая константа, используемая операционной системой для обращения к текущему каталогу. Для Windows и POSIX это `'.'`. Также доступна через [`os.path`](https://python-all.ru/3.5/library/os.path.html#module-os.path).24152416#### `os.pardir`24172418Строковая константа, используемая операционной системой для обращения к родительскому каталогу. Для Windows и POSIX это `'..'`. Также доступна через [`os.path`](https://python-all.ru/3.5/library/os.path.html#module-os.path).24192420#### `os.sep`24212422Символ, используемый операционной системой для разделения компонентов пути. Для POSIX это `'/'`, а для Windows – `'\\'`. Имейте в виду, что одного знания этого символа недостаточно для разбора или объединения путей – используйте [`os.path.split()`](https://python-all.ru/3.5/library/os.path.html#os.path.split) и [`os.path.join()`](https://python-all.ru/3.5/library/os.path.html#os.path.join), – но иногда это бывает полезно. Также доступен через [`os.path`](https://python-all.ru/3.5/library/os.path.html#module-os.path).24232424#### `os.altsep`24252426Альтернативный символ, используемый операционной системой для разделения компонентов пути, или `None`, если существует только один символ-разделитель. В Windows, где `sep` – обратная косая черта, этот символ равен `'/'`. Также доступен через [`os.path`](https://python-all.ru/3.5/library/os.path.html#module-os.path).24272428#### `os.extsep`24292430Символ, отделяющий основное имя файла от расширения; например, `'.'` в `os.py`. Также доступен через [`os.path`](https://python-all.ru/3.5/library/os.path.html#module-os.path).24312432#### `os.pathsep`24332434Символ, традиционно используемый операционной системой для разделения компонентов пути поиска (как в `PATH`), например `':'` для POSIX или `';'` для Windows. Также доступен через [`os.path`](https://python-all.ru/3.5/library/os.path.html#module-os.path).24352436#### `os.defpath`24372438Путь поиска по умолчанию, используемый [`exec*p*`](https://python-all.ru/3.5/library/os.html#os.execl) и [`spawn*p*`](https://python-all.ru/3.5/library/os.html#os.spawnl), если в окружении нет ключа `'PATH'`. Также доступен через [`os.path`](https://python-all.ru/3.5/library/os.path.html#module-os.path).24392440#### `os.linesep`24412442Строка, используемая для разделения (вернее, завершения) строк на текущей платформе. Это может быть один символ, например `'\n'` для POSIX, или несколько символов, например `'\r\n'` для Windows. Не используйте *os.linesep* в качестве символа конца строки при записи файлов, открытых в текстовом режиме (по умолчанию); вместо этого используйте одиночный `'\n'` на всех платформах.24432444#### `os.devnull`24452446Путь к нулевому устройству. Например: `'/dev/null'` для POSIX, `'nul'` для Windows. Также доступен через [`os.path`](https://python-all.ru/3.5/library/os.path.html#module-os.path).24472448#### `os.RTLD_LAZY`24492450#### `os.RTLD_NOW`24512452#### `os.RTLD_GLOBAL`24532454#### `os.RTLD_LOCAL`24552456#### `os.RTLD_NODELETE`24572458#### `os.RTLD_NOLOAD`24592460#### `os.RTLD_DEEPBIND`24612462Флаги для использования с функциями [`setdlopenflags()`](https://python-all.ru/3.5/library/sys.html#sys.setdlopenflags) и [`getdlopenflags()`](https://python-all.ru/3.5/library/sys.html#sys.getdlopenflags). Смотрите страницу руководства Unix *dlopen(3)*, чтобы узнать, что означают различные флаги.24632464Новое в версии 3.3.24652466## 16.1.9. Разные функции24672468#### `os.urandom(n)`24692470Возвращает строку из *n* случайных байтов, пригодных для криптографического использования.24712472Эта функция возвращает случайные байты из источника случайности, специфичного для ОС. Возвращаемые данные должны быть достаточно непредсказуемыми для криптографических приложений, хотя их точное качество зависит от реализации ОС.24732474В Linux используется системный вызов `getrandom()`, если он доступен и пул энтропии urandom инициализирован (`getrandom()` не блокируется). В Unix-подобных системах запрашивается `/dev/urandom`. В Windows используется `CryptGenRandom()`. Если источник случайности не найден, возбуждается [`NotImplementedError`](https://python-all.ru/3.5/library/exceptions.html#NotImplementedError).24752476Для удобного интерфейса к генератору случайных чисел, предоставляемому платформой, обратитесь к [`random.SystemRandom`](https://python-all.ru/3.5/library/random.html#random.SystemRandom).24772478Изменено в версии 3.5.2: На Linux, если `getrandom()` блокируется (пул энтропии urandom ещё не инициализирован), используется резервный вариант – чтение `/dev/urandom`.24792480Изменено в версии 3.5: В Linux 3.17 и новее теперь используется системный вызов `getrandom()`, когда он доступен. В OpenBSD 5.6 и новее теперь используется функция C `getentropy()`. Эти функции позволяют избежать использования внутреннего файлового дескриптора.2481