您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

仅当与python不存在时才安全创建文件

仅当与python不存在时才安全创建文件

:另请参见DaveJones的回答:从python3.3开始,您可以使用该x标志open()来提供此功能

作为参考,Python 3.3'x'open()函数中实现了一种新模式来涵盖此用例(仅创建,如果文件存在则失败)。请注意,'x'模式是单独指定的。使用'wx'结果中的ValueErroras'w'是多余的(无论如何,如果调用成功,您唯一可以做的就是将其写入文件;如果调用成功,它就不存在):

>>> f1 = open('new_binary_file', 'xb')
>>> f2 = open('new_text_file', 'x')

是的,但不使用Python的标准open()调用。您需要使用os.open()代替,它允许您为基础C代码指定标志。

特别是您要使用O_CREAT | O_EXCL。从该名男子页open(2)O_EXCL我的Unix系统:

确保此调用创建了文件:如果将此标志与一起指定O_CREAT,并且路径名已经存在,open()则将失败。O_EXCL如果O_CREAT未指定,则行为不确定。

当指定这两个标志时,将不遵循符号链接:如果pathname是符号链接,则open()无论符号链接指向何处都将失败。

O_EXCL 仅当在内核2.6或更高版本上使用NFSv3或更高版本时,NFS才支持功能。在O_EXCL不提供NFS支持的环境中,依赖它执行锁定任务的程序将包含竞争条件。

因此,这并不完美,但AFAIK是避免这种情况的最接近的方法

编辑:使用os.open()而不是其他规则open()仍然适用。特别是,如果你想使用返回的文件描述符进行读取或写入,你需要的一个O_RDONLYO_WRONLYO_RDWR标志以及。

所有O_*标志都在Python的os模块中,因此您需要import os使用os.O_CREAT等。

python 2022/1/1 18:26:38 有691人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶