Windows 上的 fcntl 替代品

新手上路,请多包涵

我收到了一个使用标准库中的 fcntl 模块的 Python 项目(如果这很重要,它恰好是一个 Django 项目),该模块似乎仅在 Linux 上可用。当我尝试在我的 Windows 机器上运行它时,它以 ImportError 停止,因为这里不存在这个模块。

有什么方法可以让我对程序进行一些小改动以使其在 Windows 上运行?

原文由 Ram Rachum 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

Windows 上 fcntl 的替代品是 win32api 调用。用法完全不同。这不是您可以翻转的开关。

换句话说,将 fcntl -user 模块移植到 Windows 并非易事。它要求您分析每个 fcntl 调用的确切作用,然后找到等效的 win32api 代码(如果有)。

还有可能使用 fcntl 的某些代码没有 Windows 等效项,这将需要您更改模块 api,并且可能需要使用您要移植的模块来更改程序的结构/范式。

如果您提供有关 fcntl 调用的更多详细信息,人们可以找到 Windows 等效项。

原文由 nosklo 发布,翻译遵循 CC BY-SA 2.5 许可协议

fcntl 模块仅用于锁定固定文件,因此假设您不尝试多重访问,这可能是一个可接受的解决方法。将此模块放在您的 sys.path 中,它应该可以作为官方 fcntl 模块工作。

尝试仅在 Windows 中 将此模块( source ) 用于开发/测试目的。

 def fcntl(fd, op, arg=0):
    return 0

def ioctl(fd, op, arg=0, mutable_flag=True):
    if mutable_flag:
        return 0
    else:
        return ""

def flock(fd, op):
    return

def lockf(fd, operation, length=0, start=0, whence=0):
    return

当然,那么您需要将 fcntl.py 模块放在您要使用的 Python 解释器的 site-packages 目录中。例如, %LOCALAPPDATA%\Programs\Python\Python310\lib\site-packages\fcntl\ 。这就是我的 site-packages 生活的地方。检查 Tutorialspoint 找到你的位置。

原文由 Muhammad Soliman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题