Python文档准确无法在Unix上支持os.pread / pwrite,而不支持Windows吗?我问一个看起来很明显的问题,因为Windows在将功能添加到Python之前已经支持这些功能(通过不同的名称)将近20年,并且在Unix之前5年(特别是POSIX)支持它们。
答案 0 :(得分:2)
真实情况是 - HAVE_PREAD
导出了吗?
由于MSVC ++不提供pread
但为此使用ReadFile
,因此不会通过os
模块导出。
它确实似乎是在overlapped中导出的。您可以在_winapi
找到它。
答案 1 :(得分:1)
是的,文档是正确的。您可以在posixmodule.c
中查看来源,或者自己尝试一下。
原因是os
模块按照open
返回的POSIX样式文件描述符工作。 Windows支持POSIX样式的文件描述符,但不支持完整的POSIX API。
特定于Windows的基于HANDLE
的API确实具有许多类似的功能 - 在某些情况下更多,在某些情况下更少,在某些情况下只是不同。对于文本文件的io
等高级包装,反应器循环的asyncio
,文件系统操作的shutil
,管道的multiprocessing
等,Python经常使用Win32 API,而不是在Windows上使用不完整的POSIX API。
但是对于os
中的低级功能,它主要将每个函数直接映射到本机函数调用,这种包装器将很难做到,特别是在不强迫每个人使用非常弱的最低级别的情况下共同点。
这与Python在os.startfile
中不支持任何内容的原因相同 - 即使macOS具有与Windows相似的功能,并且Linux已经通过xdg使用了多年,但两者都没有任何与Windows一样的东西。
(当然,正如Basile Starynkevitch在评论中暗示的那样,有些情况下可能可以完美地镜像API,而且它没有发生,因为没有人为它编写代码例如,Windows上的os.replace
直到Python 3.3就属于这种情况。)