首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python -如何将“打开文件的OS级句柄”转换为文件对象?

Python -如何将“打开文件的OS级句柄”转换为文件对象?
EN

Stack Overflow用户
提问于 2008-10-03 19:41:05
回答 6查看 21.2K关注 0票数 57

tempfile.mkstemp()返回:

一个元组,其中包含打开文件的OS级句柄(os.open()将返回)和该文件的绝对路径名,按顺序排列。

如何将操作系统级句柄转换为文件对象?

documentation for os.open()声明:

要在“文件对象”中包装文件描述符,请使用fdopen()。

所以我试着:

代码语言:javascript
复制
>>> 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
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-10-03 19:47:17

您可以使用

代码语言:javascript
复制
os.write(tup[0], "foo\n")

来写入句柄。

如果想要打开句柄进行写入,则需要添加"w"模式

代码语言:javascript
复制
f = os.fdopen(tup[0], "w")
f.write("foo")
票数 57
EN

Stack Overflow用户

发布于 2009-08-18 19:44:32

下面是如何使用with语句完成此操作:

代码语言:javascript
复制
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')
票数 13
EN

Stack Overflow用户

发布于 2008-10-03 20:00:15

您忘记在fdopen()中指定打开模式('w')。默认值为'r',导致write()调用失败。

我认为mkstemp()创建的文件是只读的。使用'w‘调用fdopen可能会重新打开它以进行写入(您可以重新打开由mkstemp创建的文件)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/168559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档