代码之家  ›  专栏  ›  技术社区  ›  Ram Rachum

Windows上的FCNTL替换

  •  61
  • Ram Rachum  · 技术社区  · 16 年前

    我收到了一个使用 fcntl 来自标准库的模块,它似乎只在Linux上可用。当我尝试在我的Windows计算机上运行它时,它会以 ImportError ,因为此处不存在此模块。

    我有没有办法在程序中做一个小改动,使它在Windows上工作?

    3 回复  |  直到 7 年前
        1
  •  67
  •   mark4o    16 年前

    替代 fcntl 在Windows上 win32api 电话。用法完全不同。这不是一个你可以随意翻转的开关。

    换句话说,端口A 文件锁 -在Windows中使用大量用户模块并非易事。它要求你分析每一个 文件锁 调用,然后找到等价的 Win32 API 代码,如果有的话。

    也有可能一些代码使用 文件锁 没有与Windows等效的,这将要求您更改模块API,也可能更改使用所移植模块的程序的结构/范式。

    如果您提供有关 文件锁 人们可以找到与Windows等效的调用。

        2
  •  30
  •   abarnert    7 年前

    fcntl模块仅用于锁定固定文件,因此假设您不尝试多次访问,这是可以接受的解决方法。将此模块放入 sys.path 它应该作为正式的fcntl模块工作。

    试用使用 this module 仅用于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
    
        3
  •  16
  •   anatoly techtonik Tony    9 年前

    虽然这并不能立即帮助您,但有一种替代方法可以同时用于Unix(FCNTL)和Windows(Win32 API调用),称为: 门锁

    它将自己描述为一个跨平台(POSIX/NT)API,用于针对Python的集群式文件锁定。它基本上将fcntl映射到win32 api调用。

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