如何使用'with'从'os'打开文件对象?

时间:2013-10-24 05:16:55

标签: python subprocess fdopen

我正在尝试使用'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

>>>

任何想法如何使用“with”从os.fdopen打开文件对象,以便可以自动关闭连接?

由于

2 个答案:

答案 0 :(得分:1)

使用此表单,它有效。

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

答案 1 :(得分:0)

详细说明Rohith's answer,他们打开文件的方式非常重要。

with通过内部调用seleral函数来工作,所以我一步一步地尝试了它:

>>> 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__() essentiall调用f.close(),然后调用f.flush(),将此输出缓冲区刷新到磁盘 - 或者,至少尝试这样做。

但它失败了,因为文件不可写。所以发生[Errno 9] Bad file descriptor