Как открыть объект файла из 'os', используя 'с'?

Я пытаюсь открыть файл с помощью "os.open()", как показано ниже

>>> filePath
'C:\\Shashidhar\\text.csv'
>>> fd = os.open(filePath,os.O_CREAT)
>>> with os.fdopen(fd, 'w') as myfile:
...    myfile.write("hello")

IOError: [Errno 9] Bad file descriptor

>>>

Любая идея, как я могу открыть объект файла из os.fdopen с помощью "с", чтобы соединение могло быть закрыто автоматически?

Спасибо

2 ответа

Используйте эту форму, это сработало.

with os.fdopen(os.open(filepath,os.O_CREAT | os.O_RDWR ),'w') as fd:  
    fd.write("abcd")

Чтобы уточнить ответ Рохита, важно то, как вы открываете файл.

with работает внутренним вызовом отдельных функций, поэтому я попробовал это шаг за шагом:

>>> fd = os.open("c:\\temp\\xyxy", os.O_CREAT)
>>> f = os.fdopen(fd, 'w')
>>> myfile = f.__enter__()
>>> myfile.write("213")
>>> f.__exit__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 9] Bad file descriptor

Какие? Зачем? А почему сейчас?

Если я сделаю то же самое с

>>> fd = os.open(filepath, os.O_CREAT | os.O_RDWR)

все работает отлично.

С write() Вы только записали в выходной файл объект Puffer, и f.__exit__() основные звонки f.close()который в свою очередь вызывает f.flush(), который сбрасывает этот выходной буфер на диск - или, по крайней мере, пытается это сделать.

Но это не удается, так как файл не доступен для записи. Так что [Errno 9] Bad file descriptor происходит.

Другие вопросы по тегам