Ответ 1
Вы можете использовать
os.write(tup[0], "foo\n")
для записи в дескриптор.
Если вы хотите открыть дескриптор для записи, вам нужно добавить режим "w"
f = os.fdopen(tup[0], "w")
f.write("foo")
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
Вы можете использовать
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")