Python Glossary English

все Python 3osфункция

os.open()

os — файловые дескрипторы

Низкоуровневое открытие файла: возвращает целое число — файловый дескриптор — по флагам O_*. Это не встроенный open() и не файловый объект.

Синтаксис

fd = os.open(path, flags, mode=0o777, *, dir_fd=None)

Результат — число, у него нет read()/write(): работают os.read/os.write с байтами, закрывают os.close(fd), а with не поддерживается — забытый дескриптор утекает. Флаги складываются через |: O_WRONLY|O_CREAT|O_TRUNC, и без O_CREAT отсутствующий файл даёт FileNotFoundError. Ценность в том, чего нет у open(): O_CREAT|O_EXCL атомарно создаёт файл или даёт FileExistsError, а mode задаёт права нового файла (с учётом umask). Чтобы получить обычный файловый объект, оберните дескриптор os.fdopen(fd); на Windows для двоичных данных добавьте O_BINARY.

Примеры

import os
fd = os.open('data.bin', os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o644)
print(type(fd).__name__)  # → int
print(os.write(fd, b'hello'))  # → 5
os.close(fd)
with os.fdopen(os.open('data.bin', os.O_RDONLY), 'rb') as f:
    print(f.read())  # → b'hello'
import os
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL
os.close(os.open('lock', flags))
try:
    os.open('lock', flags)
except FileExistsError:
    print('уже занят')  # → уже занят

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности