python:如果我使用fdopen需要从mkstemp关闭文件?

时间:2011-10-17 21:17:58

标签: python file file-io operating-system

以下哪项更正确?

fi, path = tempfile.mkstemp()
f = os.fdopen(fi, "w")
f.write(res)
f.close()
os.close(fi)

或:

fi, path = tempfile.mkstemp()
f = os.fdopen(fi, "w")
f.write(res)
f.close()

5 个答案:

答案 0 :(得分:6)

检查f.fileno(),它应与fi相同。你应该只关闭那个文件描述符一次,所以第二个是正确的。

在Unix上,第一个导致错误:

>>> f.close()
>>> os.close(fi)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 9] Bad file descriptor

答案 1 :(得分:3)

如果在最新的Python上,您可以将其打高压到:

with os.fdopen(tempfile.mkstemp()[0]) as f:
    f.write(res)

答案 2 :(得分:2)

如果您需要以下路径,请继续跟进最新答案:

f_handle, f_path = tempfile.mkstemp()
with os.fdopen(f_handle, 'w') as f:
    f.write(res)

try:
    # Use path somehow
    some_function(f_path)

finally:
    # Clean up
    os.unlink(f_path)

答案 3 :(得分:1)

我愿意:

fi, path = tempfile.mkstemp()
f = os.fdopen(fi, "w")
try:
  f.write(res)
finally:
  f.close()

答案 4 :(得分:0)

如果你打算在上一个例子中写下你需要:

with os.fdopen(tempfile.mkstemp()[0], 'w') as f:
     f.write(res)