Python:打开文件而不创建锁

2024-02-24

我正在尝试用 Python 创建一个脚本来备份一些文件。但是,这些文件可以随时重命名或删除。我不希望我的脚本通过锁定文件来阻止这种情况;在备份过程中,该文件应该仍然可以随时删除。

我怎样才能在Python中做到这一点?而且,会发生什么?如果无法读取流,我的对象是否会变为 null?

谢谢你!我对 Python 有点陌生。


正如@kindall 所提到的,这是一个特定于Windows 的问题。 Unix 操作系统允许删除。

要在 Windows 中执行此操作,我需要使用win32file.CreateFile() http://timgolden.me.uk/pywin32-docs/win32file__CreateFile_meth.html使用 Windows 特定的dwSharingMode标志(在 Python 中pywin32 https://pypi.org/project/pywin32/,它只是被称为shareMode).

粗略示例:

import msvcrt
import os
import win32file

py_handle = win32file.CreateFile(
    'filename.txt',
    win32file.GENERIC_READ,
    win32file.FILE_SHARE_DELETE
        | win32file.FILE_SHARE_READ
        | win32file.FILE_SHARE_WRITE,
    None,
    win32file.OPEN_EXISTING,
    win32file.FILE_ATTRIBUTE_NORMAL,
    None
)
try:
    with os.fdopen(
        msvcrt.open_osfhandle(py_handle.handle, os.O_RDONLY)
    ) as file_descriptor:
        ... # read from `file_descriptor`
finally:
    py_handle.Close()

Note:如果您需要保留win32 文件超出其生命周期而开放文件句柄对象返回,你应该调用PyHandle.detach() http://timgolden.me.uk/pywin32-docs/PyHANDLE__Detach_meth.html在那把柄上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:打开文件而不创建锁 的相关文章

随机推荐

  • 为什么 QObject ::findChildren 返回具有公共基类的子级?

    我使用 QObject 作为复合模式的基类 假设我有一个父类 File 在一个人为的示例中 我向其中添加不同类型的子类 HeaderSection 和 PageSection File HeaderSection 和 PageSection
  • 简单表达式缺少参数类型

    遵循播放 websocket 示例 http www playframework com documentation 2 3 x ScalaWebSockets我遇到了一个奇怪的问题 文档中的以下示例正在运行 Future successf
  • 弹出并刷新视图控制器

    我有三个视图控制器 当我到达第三个视图控制器时 我使用 poptorootviewcontroller 弹出到我的第一个视图控制器 但是当我在第三个视图控制器中使用 popviewcontroller 我想返回到我的第二个视图控制器 时 它
  • 为什么 PowerShell 无法识别带引号的参数?

    当您直接调用脚本 在 PowerShell 控制台或 ISE 中 或通过另一个 PowerShell 实例调用脚本时 为什么 PowerShell 对带引号的参数的处理方式有所不同 这是脚本 TestQuotes ps1 param str
  • scala 中的非最终单例对象有什么意义?

    我一直以为objectScala 中的声明将被编译为final类 因为它们是由有效的匿名类实现的 自从final与非最终类相比 类更容易被 JVM 优化 我认为最终性有好处并且没有成本 所以所有object实施将是最终的 但我一定错过了一些
  • PySpark 使用临时 AWS 令牌进行 s3 身份验证的问题

    我已经设置了本地 PySpark 但是每次我尝试使用 s3a 协议读取文件 s3 时 它都会返回 403 AccessDenied 错误 我尝试连接的账户仅支持 AWS ShouldRole 它为我提供了临时 Access key Secr
  • 如何在不使用 LoadBalancer 类型的情况下发布 Kubernetes 服务(在 GCP 上)

    我想避免使用type LoadBalancer 对于某个 Kubernetes Service 但仍然能够将其发布到互联网上 我正在使用 Google Cloud Platform GCP 来运行当前在单个节点上运行的 Kubernetes
  • android中的fontFamily和typeFace有什么区别?

    android 中的 fontFamily 和 typeFace 有什么区别 当然 我阅读了android开发者网站中的所有描述 但我还不清楚 根据两个词的一般含义 应该是相同的意思 但在android xml属性 textview 中 它
  • 全局覆盖 Emacs 中的键绑定

    如何设置全局覆盖并优先于该键的所有其他绑定的键绑定 我想覆盖所有主要 次要模式映射并确保我的绑定始终有效 这当然行不通 global set key C i some function 它适用于text mode 但是当我使用lisp mo
  • 从 WCF 客户端使用非 wcf SOAP 错误(定义了 SOAP 错误)

    我有一个从 WCF 客户端调用的非 WCF 服务器 我需要访问已注册的肥皂故障 以防服务器抛出它 它包含我需要用户的反馈 我使用了来自的例子如何从 WCF 客户端访问 SOAP 1 1 错误详细信息 无错误契约 https stackove
  • 使用 Java 进行 MongoDB ISODate 字段搜索

    我在使用 Java 搜索 mongodb 中的 ISODate 字段时遇到问题 我想找到完全匹配的日期 以下是我查询第一个集合并获取 ISODate 字段 Timestamp 的方法 一旦我得到这个日期 我想搜索具有相同 时间戳 值的另一个
  • FxCop 和代码分析规则

    我最近开始在 Visual Studio 中的项目中使用代码分析 我创建了一个自定义规则集 用于我的所有项目 其中包括两个 Microsoft 定义的规则集 我一直致力于将 FxCop 集成到 CI 构建过程中 以使未通过所有规则的构建失败
  • 我如何使用 Rugged 来创建和提交文件,就像从命令行一样?

    我正在尝试使用坚固的东西来做一些非常简单的事情 创建并提交一个文件 使存储库处于与执行相同的状态 git init echo blah blah blah gt blah txt git add blah txt git commit m
  • 围绕三角形画布旋转圆

    我想使用画布围绕三角形旋转一个圆 前面有这段代码 但这是中间的圆 还有一个旋转的矩形 我希望圆旋转并在中间有一个三角形 有人可以帮忙吗 这是我的JS代码 var canvas document getElementById canvas v
  • 如何正确使用run_in_executor?

    我尝试使用run in executor并有一些问题 这是代码 基本上是从文档复制粘贴 import asyncio import concurrent futures def cpu bound val CPU bound operati
  • Yii 将数据从一个模型复制到另一个模型

    我是 yii 的新手 我使用扩展的模型从表单中收集数据CFormModel在控制器内部我想将这些数据复制到一个扩展自的模型CActiveRecord为了保存到数据库 是否有一种方法或方式将数据从数据收集模型复制到数据保存模型 而不是通过属性
  • pythonw.exe 还是 python.exe?

    长话短说 pythonw exe什么也没做 python exe不接受任何内容 我应该使用哪一个 test py print a 命令窗口 C path gt pythonw exe test py
  • 了解addChildViewController的使用

    我正在处理一些需要重构的代码 视图控制器充当其他两个视图控制器的容器 并将在它们之间交换 如下面的代码所示 这可能不是最好的设计 可能不需要以这种方式交换视图控制器 我明白那个 但是 当我使用此代码时 我想进一步了解 addChildVie
  • file_exist 放置在 php 函数内时不起作用

    我已经寻找过几乎类似的问题但这些都没有给我正确的答案 我有一个完全workingif else 语句中的 file exist 代码在这里 但是当我将它放在一个函数中时它就不再起作用了 这是代码 if file exists SERVER
  • Python:打开文件而不创建锁

    我正在尝试用 Python 创建一个脚本来备份一些文件 但是 这些文件可以随时重命名或删除 我不希望我的脚本通过锁定文件来阻止这种情况 在备份过程中 该文件应该仍然可以随时删除 我怎样才能在Python中做到这一点 而且 会发生什么 如果无