Флаги режима os. open

flagi rezhima os open Инструменты для работы с файлами и каталогами

Зачем же нужны дополнительные файловые средства в модуле os? Если вкратце, то они обеспечивают более низкоуровневое управление обработкой файлов. Встроенная функция open проста в использовании, но она ограничена возможностями файловой системы, которую использует, и добавляет некоторые дополнительные особенности, которые могут быть нежелательны. Модуль os позволяет сценариям быть более точными; например, следующий фрагмент открывает дескриптор файла в двоичном режиме для чтения-записи, выполняя битовую операцию «ИЛИ» над двумя флагами режима, экспортируемыми модулем os:

>>> fdfile = os.open(rC:\temp\spam.txt’, (os.O_RDWR | os.O_BINARY))

>   >> os.read(fdfile, 20)

b’Hello stdio file\r\nHe’

>   >> os.lseek(fdfile, 0, 0) # вернуться в начало файла

>   >> os.read(fdfile, 100) # в двоичном режиме сохраняются “\r\n

b’Hello stdio file\r\nHello descriptor file\n’

>   >> os.lseek(fdfile, 0, 0)

>   >> os.write(fdfile, bHELLO’) # перезаписать первые 5 байтов 5

C:\temp> type spam.txt

HELLO stdio file

Hello descriptor file

В данном случае эквивалентный режим открытия с помощью встроенной функции open определяется строками rb+” и r+b”:

>   >> file = open(rC:\temp\spam.txt’, ‘rb+’) # то же самое, но с помощью open

>   >> file.read(20) # и объектов файлов

b’HELLO stdio file\r\nHe’

>   >> file.seek(0)

>   >> file.read(100)

b’HELLO stdio file\r\nHello descriptor file\n’

>   >> file.seek(0)

>>> file.write(b’Jello’)

5

>>> file.seek(0)

>>> file.read()

b’Jello stdio file\r\nHello descriptor file\n’

В некоторых системах флаги для функции os.open позволяют указывать более сложные режимы — например, исключительный доступ (O_EXCL) и неблокирующий режим (O_NONBLOCK). Некоторые из этих флагов не переносимы между платформами (еще одна причина в пользу встроенных объектов файлов). Найти полный список других флагов открытия можно в руководстве по библиотеке или вызвав на своем компьютере функцию dir(os).

И последнее замечание: в Python использование функции os.open с флагом O_EXCL на сегодняшний день является наиболее переносимым способом исключить возможность параллельного изменения файла или обеспечить синхронизацию с другими процессами. Где может использоваться эта особенность, мы увидим в следующей главе, когда приступим к исследованию инструментов параллельной обработки данных. Программам, параллельно выполняющимся на сервере, к примеру, может потребоваться устанавливать блокировку на файлы, прежде чем изменять их, если подобные изменения могут одновременно запрашиваться несколькими потоками выполнения или процессами.

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий