все 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Сообщить о неточности