原子文件写入。

atomicwrites的Python项目详细描述


https://travis-ci.org/untitaker/python-atomicwrites.svg?branch=masterhttps://ci.appveyor.com/api/projects/status/vadc4le3c27to59x/branch/master?svg=true

原子文件写入。

fromatomicwritesimportatomic_writewithatomic_write('foo.txt',overwrite=True)asf:f.write('Hello world.')# "foo.txt" doesn't exist yet.# Now it does.

区别于其他类似库的特性(请参见Alternatives and Credit):

    < P>无竞争的断言,目标文件还不存在。这可能是 由overwrite参数控制。

  • Windows支持,尽管没有经过很好的测试。MSDN资源不是很丰富 明确哪些操作是原子的我的假设是基于a comment 作者是Doug Crook,他出现了 成为微软员工:

    FAQ: Is MoveFileEx atomic Frequently asked question: Is MoveFileEx atomic if the existing and new files are both on the same drive?

    The simple answer is “usually, but in some cases it will silently fall-back to a non-atomic method, so don’t count on it”.

    The implementation of MoveFileEx looks something like this: […]

    The problem is if the rename fails, you might end up with a CopyFile, which is definitely not atomic.

    If you really need atomic-or-nothing, you can try calling NtSetInformationFile, which is unsupported but is much more likely to be atomic.

  • >P>简单的高级API,它封装了非常灵活的基于类的API。

  • 跨平台的一致错误处理

工作原理

它使用与给定路径在同一目录中的临时文件这确保了 临时文件位于同一个文件系统上。

然后,临时文件将自动移动到目标位置:on posix将使用rename如果文件应该被覆盖,否则 linkunlink的组合。在windows上,它使用MoveFileEx到 stdlib的ctypes带有适当的标志。

注意,对于linkunlink,有一个时间窗口 可能在文件系统中的两个条目下可用: 临时文件,以及目标文件的名称。

还要注意,目标文件的权限可能会这样更改。在一些 可以在没有任何并发问题的情况下发出chmod,但是 因为情况并非总是这样,所以这个库并不是自己做的。

fsync

在posix上,fsync在临时文件被写入(到 刷新文件内容和元数据),并在文件 移动(刷新文件名)。

fsync不处理磁盘的内部缓冲区,但似乎没有 成为任何标准的posixapi。在os x上,fcntlF_FULLFSYNC而不是fsync因为这个原因。

在Windows上,_commit 已使用,但无法保证磁盘内部缓冲区。

替代品和信用

AtomicWrites直接受到以下库的启发(并共享 最小代码量):

原子写入的其他替代方案包括:

  • sashka/atomicfile。原来我 考虑过使用它,但当时它缺少很多特性 需要(Windows支持,覆盖参数,通过 子类化)。
  • Boltons library collection 提供了一个用于原子文件写入的类,它看起来与 overwrite参数。但它缺少windows支持。

许可证

根据麻省理工学院授权,请参见LICENSE

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java“抹去”了整个swing GUI,只有一个组件例外   有人能解释一下为什么这个用来反转字符串的Java程序不起作用吗?   jar使用java代码发送电子邮件   java如何使用keyRelease连续激发筛选表?   安卓 studio在java中执行lua脚本   java在实现StatefulJob时,“延迟”是什么意思?   当我再次尝试上传时,java Android无法查看保存在新目录中的图像   爪哇岩布剪刀问题只返回一半结果   使用Jersey Rest客户端进行java异步大文件上载   Java日历。加错年份   java对于多个autosize文本视图只有一个大小   java JodaTime:句点、间隔和持续时间之间有什么区别?   java对返回数据的正确处理   多线程多线程在java中打印偶数和奇数?   摆动Java弹跳球移动   httpconnection Java HttpUrlConnection抛出连接被拒绝   寻找C#的XmlConvert的Java等价物。编码名称   jetty在一个cookie Java代码中设置多个值   使用maven构建java jar显示错误   java我可以只使用输入在iText中生成超级脚本吗?