在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