我收到了一个Python项目(如果有关系的话,它恰好是一个Django项目),它使用了标准库中的fcntl模块,它似乎只在Linux上可用。当我试图在我的Windows机上运行它时,它会停止并返回一个ImportError,因为这里不存在这个模块。
有没有办法让我在程序中做一点小改动,让它在Windows上工作?
发布于 2009-09-14 15:54:36
windows上fcntl的替代品是win32api调用。用法完全不同。这不是你可以随意翻动的开关。
换句话说,将一个大量使用fcntl的用户模块移植到windows并非易事。它要求您分析每个fcntl调用到底做了什么,然后找到等效的win32api代码。
还有一种可能是,使用fcntl的一些代码没有windows等效项,这将需要您更改module api,也许还需要更改使用您要移植的模块的程序的结构/范例。
如果您提供有关fcntl调用的更多详细信息,人们就可以找到windows等效项。
发布于 2014-08-24 20:05:33
fcntl模块仅用于锁定锁定文件,因此假设您不尝试多次访问,这可能是一种可接受的解决方法。把这个模块放在你的sys.path中,它应该就像官方的fcntl模块一样工作。
尝试仅在windows中使用this module (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发布于 2012-04-03 20:18:58
尽管这不能立即帮助您,但有一种方法可以同时用于Unix (fcntl)和Windows (win32 api调用),称为:portalocker。
它将自己描述为用于Python的flock样式文件锁定的跨平台(posix/nt) API。它基本上将fcntl映射到win32应用程序接口调用。
现在可以将http://code.activestate.com/recipes/65203/上的原始代码安装为一个单独的包- https://pypi.python.org/pypi/portalocker
https://stackoverflow.com/questions/1422368
复制相似问题