Python pread/pwrite只在Unix上?

2024-10-06 12:26:51 发布

您现在位置:Python中文网/ 问答频道 /正文

Python文档是否准确os.pread/pwrite操作系统仅在Unix上受支持,Windows不受支持?我问了一个看起来非常明显的问题,因为Windows在将这些功能添加到Python之前已经支持了近20年(以不同的名称命名),而在Unix(特别是POSIX)支持这些功能之前5年。在


Tags: 文档功能名称oswindowsunix命名posix
2条回答

真正的条件是-HAVE_PREAD是否导出?在

以下是相关片段:https://github.com/python/cpython/blob/4a172ccc739065bb658c75e8929774a8e94af9e9/Modules/posixmodule.c#L8422

由于MSVC++没有提供pread,而是使用了^{},所以它不会通过os模块导出。在

不过,它似乎是在overlapped中导出的。您可以在_winapi中找到它。在

是的,文件是正确的。您可以在^{}中看到源代码,也可以自己尝试一下。在

原因是os模块按照POSIX风格的文件描述符工作,正如open返回的那样。Windows确实支持POSIX风格的文件描述符,但不支持完整的posixapi。在

基于Windows的基于HANDLE的API确实有很多相似的功能,在某些情况下更多,在某些情况下更少,在某些情况下只是不同。对于高级包装器,如文本文件的ioasyncio用于反应器循环,shutil用于文件系统操作,multiprocessing用于管道等,Python经常使用win32api,而不是在Windows上使用不完整的POSIX API。在

但是对于os中的低级功能(主要是将每个函数直接映射到本机函数调用),这种包装将非常困难,尤其是如果不强制每个人使用非常弱的最小公分母。在

这也是Python在os.startfile中只支持Windows之外的任何东西的原因——尽管macOS拥有类似功能的时间甚至比Windows长,而且Linux已经通过xdg拥有了多年,但两者都没有与Windows完全相同的功能。在

(当然,正如Basile Starynkevitch在一篇评论中所暗示的那样,在某些情况下,完美地镜像一个API,但它并没有发生,因为没有人为它编写代码。例如,在python3.3之前的Windows上,os.replace就是这种情况。)

相关问题 更多 >