Использование файлов, возвращаемых os. open

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

Чтобы дать вам общее представление об этом наборе инструментов, проведем несколько интерактивных экспериментов. Встроенные объекты файлов и файловые дескрипторы модуля os обрабатываются различными наборами инструментов, но в реальности они связаны между собой — объекты файлов просто добавляют дополнительную логику поверх дескрипторов файлов.

Метод fileno объекта файла возвращает целочисленный дескриптор, ассоциированный со встроенным объектом файла. Например, объекты файлов стандартных потоков ввода-вывода имеют дескрипторы 0, 1 и 2; вызов функции os.write для отправки данных в stdout по дескриптору дает тот же эффект, что и вызов метода sys.stdout.write:

>  >> import sys

>  >> for stream in (sys.stdin, sys.stdout, sys.stderr):

print(stream.fileno())

0

1        

2        

>  >> sys.stdout.write(‘Hello stdio world\n’) # записать с помощью метода Hello stdio world # объекта файла

18

>  >> import os

>  >> os.write(1, b’Hello descriptor world\n’) # записать с помощью модуля os Hello descriptor world

23

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

>>> file = open(r’C:\temp\spam.txt’, ‘w’)

# создать внешний файл, объект

>>> file.write(‘Hello stdio file\n’)

# записать с помощью объекта файла

>>> file.flush()

# или сразу — функции os.write

>>> fd = file.fileno()

# получить дескриптор из объекта

>>> fd

3

>>> import os

>>> os.write(fd, b’Hello descriptor file\n’) # записать с помощью модуля os

>>> file.close()

C:\temp> type spam.txt # строки, записанные

Hello stdio file # двумя способами

Hello descriptor file

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

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