这个问题与使用特定权限打开文件以进行写入(在python中)的Write file with specific permissions in Python答案有关。
答案中的代码如下所示:
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 )产生:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
IOError: File not open for writingos.fdopen有它自己的模式参数,但是设置它没有帮助:
>>> 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.fdopen和os.open打开的文件。有什么想法吗?2.7.1中的已知错误?
提前感谢!
发布于 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)。)
发布于 2013-09-03 23:40:09
确实很时髦。
os.fdopen(os.open("a1", os.O_CREAT | os.O_RDWR | os.O_APPEND | os.O_EXCL))工作,而
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具有完全的读/写访问权限。除非你这样做
os.fdopen(fd, "w") 它然后与只写文件一起工作。
https://stackoverflow.com/questions/13257748
复制相似问题