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

发布于 2024-12-10 16:53:50 字数 244 浏览 0 评论 0原文

以下哪项更正确?

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()

Which of the following is more correct?

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

or:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

一萌ing 2024-12-17 16:53:50

检查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

Check f.fileno(), it should be the same as fi. You should only ever close that file descriptor once, so the second is correct.

On Unix, the first causes an error:

>>> f.close()
>>> os.close(fi)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 9] Bad file descriptor
淡笑忘祈一世凡恋 2024-12-17 16:53:50

如果使用足够新的 Python,您可以将其简化为:

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

If on a sufficiently recent Python, you can golf this down to:

with os.fdopen(tempfile.mkstemp()[0]) as f:
    f.write(res)
仄言 2024-12-17 16:53:50

继续跟进最新的答案,如果需要路径:

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)

Continuing the follow-up on the most recent answers, if you need the path:

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)
故事未完 2024-12-17 16:53:50

我会这样做:

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

I would do:

fi, path = tempfile.mkstemp()
f = os.fdopen(fi, "w")
try:
  f.write(res)
finally:
  f.close()
一袭白衣梦中忆 2024-12-17 16:53:50

如果您要在最后一个示例中编写,您需要:

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

If you're going to write in the last example you'd need:

with os.fdopen(tempfile.mkstemp()[0], 'w') as f:
     f.write(res)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文