【问题标题】:Python: Lock directory access under windowsPython:在windows下锁定目录访问
【发布时间】:2010-09-28 12:14:07
【问题描述】:

我希望能够在 Windows 下锁定目录访问。 以下代码对 POSIX 系统下的文件或目录非常有效:

def flock(fd, blocking=False, exclusive=False):

    if exclusive:
        flags = fcntl.LOCK_EX
    else:
        flags = fcntl.LOCK_SH
    if not blocking:
        flags |= fcntl.LOCK_NB
    fcntl.flock(fd, flags)

但是我只找到了一种方法来执行文件的锁定访问,而不是使用以下代码的目录:

def flock(fd, blocking=False, exclusive=False):

    if blocking:
        flags = msvcrt.LK_NBLCK
    else:
        flags = msvcrt.LK_LOCK
    msvcrt.locking(fd.fileno(), flags, os.path.getsize(fd.name))

您知道如何改进此代码并能够锁定目录访问吗?

伯特兰

【问题讨论】:

    标签: python windows directory locking


    【解决方案1】:

    我不相信在 Windows 中的目录上使用flock() 是可能的。 flock() 上的PHPs docs 表明它甚至无法在 FAT32 文件系统上运行。

    另一方面,如果任何文件仍然打开,Windows 已经倾向于不允许您删除文件/目录。这一点,再加上智能地使用 ACL,可能会为您提供 95% 的等效解决方案。

    【讨论】:

      【解决方案2】:

      你可能可以做这样的事情来间接锁定一个具有后一个flock函数的目录。

      for file in os.listdir(dir):
       f = open(file)
       flock(f)
      

      这是一个受限版本,因为用户将能够在目录中创建新文件。

      【讨论】:

        【解决方案3】:

        是的,你是对的,至少我可以尝试锁定目录的每个文件,但这可能会很痛苦,因为我需要进入目录的所有子目录。 在 POSIX 系统中这很容易,因为目录被视为文件,所以没有问题。但是在 Windows 中,当我尝试打开一个目录时,它并不喜欢那样。

        open(dirname)
        

        引发异常:

        OSError: [Errno 13] Permission denied: dirname
        

        我不确定我的解决方案是否真的是好方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-03-09
          • 2013-07-14
          • 1970-01-01
          • 2014-05-22
          • 2015-12-27
          • 1970-01-01
          • 2015-08-02
          相关资源
          最近更新 更多