Python – Как преобразовать «дескриптор уровня ОС в открытый файл» в файл?

tempfile.mkstemp () возвращает:

кортеж, содержащий дескриптор уровня ОС для открытого файла (который будет возвращен os.open ()) и абсолютный путь к этому файлу в этом порядке.

Как преобразовать этот дескриптор уровня ОС в файл-объект?

Документация для os.open () гласит:

Чтобы обернуть файловый дескриптор в «файл-объект», используйте fdopen ().

Поэтому я попробовал:

>>> import tempfile >>> tup = tempfile.mkstemp() >>> import os >>> f = os.fdopen(tup[0]) >>> f.write('foo\n') Traceback (most recent call last): File "<stdin>", line 1, in ? IOError: [Errno 9] Bad file descriptor 

6 Solutions collect form web for “Python – Как преобразовать «дескриптор уровня ОС в открытый файл» в файл?”

Вы можете использовать

 os.write(tup[0], "foo\n") 

для записи в ручку.

Если вы хотите открыть дескриптор для записи, вам нужно добавить режим «w»

 f = os.fdopen(tup[0], "w") f.write("foo") 

Вот как это сделать, используя оператор with:

 from __future__ import with_statement from contextlib import closing fd, filepath = tempfile.mkstemp() with closing(os.fdopen(fd, 'w')) as tf: tf.write('foo\n') 

Вы забыли указать открытый режим ('w') в fdopen (). По умолчанию используется значение «r», что приводит к сбою вызова write ().

Я думаю, что mkstemp () создает файл только для чтения. Вызов fdopen с помощью 'w', вероятно, открывает его для записи (вы можете снова открыть файл, созданный mkstemp).

 temp = tempfile.NamedTemporaryFile(delete=False) temp.file.write('foo\n') temp.close() 

Какова ваша цель, здесь? tempfile.TemporaryFile неуместен для ваших целей?

Я не могу комментировать ответы, поэтому я напишу свой комментарий здесь:

Чтобы создать временный файл для доступа к записи, вы можете использовать tempfile.mkstemp и указать «w» в качестве последнего параметра, например:

 f = tempfile.mkstemp("", "", "", "w") # first three params are 'suffix, 'prefix', 'dir'... os.write(f[0], "write something") 
Python - лучший язык программирования в мире.