Windows上的fcntl替代品

Ram*_*hum 65 python linux windows

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

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

nos*_*klo 71

fcntlWindows上的替代品是win32api电话.用法完全不同.它不是一些你可以翻转的开关.

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

还有一些代码可能fcntl没有等效的窗口,这需要你使用你移植的模块更改模块api和程序的结构/范例.

如果您提供有关fcntl通话的更多详细信息,人们可以找到等效的Windows.


Muh*_*man 32

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

尝试仅在Windows中使用此模块进行开发/测试.

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
Run Code Online (Sandbox Code Playgroud)

  • 怎么样fcntl.F_GETFD和fcntl.F_SETFD (3认同)
  • 这是一个骇客。但这就是我所需要的。:) (2认同)
  • 链接似乎已损坏 (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

  • `fcntl` 比锁定文件做更多的事情。 (3认同)