Windows上的fcntl替代品

时间:2009-09-14 15:43:11

标签: python windows linux

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

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

3 个答案:

答案 0 :(得分:69)

fcntl在Windows上的替换是win32api次调用。用法完全不同。这不是一些你可以翻转的开关。

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

使用fcntl的某些代码也可能没有等效的窗口,这需要您使用您正在移植的模块更改模块api以及程序的结构/范例。

如果您提供有关fcntl来电的更多详细信息,那么人们可以找到等效的Windows。

答案 1 :(得分:30)

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

尝试仅在Windows中使用this module进行开发/测试。

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

答案 2 :(得分:16)

虽然这对你没有任何帮助,但有一种方法可以同时适用于Unix(fcntl)和Windows(win32 api调用),名为: portalocker

它将自己描述为用于Python的flock风格文件锁定的跨平台(posix / nt)API。它基本上将fcntl映射到win32 api调用。

http://code.activestate.com/recipes/65203/上的原始代码现在可以作为单独的软件包安装 - https://pypi.python.org/pypi/portalocker