原子文件写入。

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 RFID不完整输出?   java如何构造一个for循环来查找每个数组的第一个索引的总和   java Eclipse AST解析器正在删除我的规则   安卓如何在java中创建“可重写”配置?   java每次我向应用程序添加图像时,它都会崩溃   Java 8流到文件   EntityNotFoundException的java可能原因   java多线程为什么下面的程序表现得如此怪异?   java footprint soap api+mavenjaxb2plugin   java MongoDB锁定,直到找到结果   java重写Jtable选项卡行为转到下一个可编辑单元格   java关于方法和创建另一个方法   java将人脸与图像分离   java复制Spring批处理作业实例   java TextView不会更改为新设置的文本