这段代码在 Python 2.7.16 和 3.8.3 上运行会产生不同的结果:
在Python 2.7中,它按预期打印
我尝试手动创建一个文件来消除
我在文档中没有发现任何明显的问题: 运行于MacOS 10.14.6。
import tempfile
import os
fd, lockfile = tempfile.mkstemp()
flags = os.O_RDWR | os.O_CREAT
mode = 'w+b'
fd = os.open(lockfile, flags)
fileobj = os.fdopen(fd, mode)
print(fileobj.mode)
os.remove(lockfile)
在Python 2.7中,它按预期打印
w+b
,但在Python 3.8中,它打印了rb+
。为什么会以这种方式不尊重模式参数?我尝试手动创建一个文件来消除
tempfile
的差异,但仍然得到相同的结果。我在文档中没有发现任何明显的问题: 运行于MacOS 10.14.6。
fd
已经代表了一个打开的文件,你无法更改模式。fdopen
只是提供了一个包装它的 Python 对象。 - chepneros.open
中打开一个文件进行读取,那么你就不能在os.fdopen
中将其更改为可写的,但反过来是可以的。此外,回答我的问题,rb+
看起来相当于wb+
(至少在这个Python上下文中),因为+
打开文件以进行更新(读和写)。 - Alex James