首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python os.fdopen(os.open())不能用于编写吗?

python os.fdopen(os.open())不能用于编写吗?
EN

Stack Overflow用户
提问于 2012-11-07 03:11:30
回答 2查看 3.5K关注 0票数 7

这个问题与使用特定权限打开文件以进行写入(在python中)的Write file with specific permissions in Python答案有关。

答案中的代码如下所示:

代码语言:javascript
复制
with os.fdopen(os.open('foo', os.O_APPEND | os.O_CREAT, 0o644)) as out:
  out.write("hello\n")

2.7.1中的这段代码(我的公司没有安装2.7.3 )产生:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
IOError: File not open for writing

os.fdopen有它自己的模式参数,但是设置它没有帮助:

代码语言:javascript
复制
>>> with os.fdopen(os.open('foo', os.O_APPEND | os.O_CREAT, 0o644), 'a') as out:
...   out.write("hello\n")
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument

长话短说,我还不能弄清楚如何实际写入已经通过os.fdopenos.open打开的文件。有什么想法吗?2.7.1中的已知错误?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-07 03:20:30

必须从O_RDONLY、O_WRONLY或O_RDWR中选择一个作为“基本”模式参数才能打开()。

您没有显式地这样做,所以假定为O_RDONLY (在许多系统上为零)。Python的os.fdopen看到您已经指定了一个O_RDONLY和O_APPEND,这有点愚蠢。Python会抱怨这种与EINVAL (“无效参数”)错误的组合。

(实际上,如果您strace(1)您的脚本-我假设这里是Linux -我怀疑您会看到没有遇到“自然”的EINVAL。相反,python执行os.open()/open(2),然后在引发异常之前检查文件描述符上的标志(F_GETFL)。)

票数 8
EN

Stack Overflow用户

发布于 2013-09-03 23:40:09

确实很时髦。

代码语言:javascript
复制
os.fdopen(os.open("a1", os.O_CREAT | os.O_RDWR | os.O_APPEND | os.O_EXCL))

工作,而

代码语言:javascript
复制
os.fdopen(os.open("a1", os.O_CREAT | os.O_WRONLY | os.O_APPEND | os.O_EXCL))

引发到os.fdopen()OSError: [Errno 22] Invalid argument

因此,os.fdopen()需要对FD具有完全的读/写访问权限。除非你这样做

代码语言:javascript
复制
os.fdopen(fd, "w") 

它然后与只写文件一起工作。

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

https://stackoverflow.com/questions/13257748

复制
相关文章

相似问题

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