在Windows上的fcntl替代

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

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

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

换句话说,将fcntl -heavy-user模块移植到windows并不是一件简单的事情。 它需要你分析每个fcntl调用的确切内容,然后find相应的win32api代码(如果有的话)。

也有一些使用fcntl代码没有相同的窗口的可能性,这将需要你改变模块的API,也许使用你正在移植的模块的程序的结构/范例。

如果你提供了关于fcntl调用的更多细节,人们可以find相应的windows。

fcntl模块仅用于lockinglocking文件,因此假设您不尝试多次访问,这可以是一个可以接受的解决方法。 把这个模块放在你的PYTHONPATH中,它应该是正式的fcntl模块。

尝试使用此模块仅用于Windows开发/testing目的。

 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 

虽然这不能帮你马上解决,但是还有一种方法可以同时使用Unix(fcntl)和Windows(win32 API调用),称为: portalocker

它将自己描述为跨平台(posix / nt)API,用于Python的群集式文件locking。 它基本上映射fcntl到win32 API调用。

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