在我的脚本开始时,文件 script.log
预计存在,并且消息将附加到其中。但如果该文件不存在(用户决定删除该文件),则不应再次创建该文件,消息将打印到 stdout 。 仅当您看到水桶时才将其装满。
如何做到这一点?
一定有很多人遇到过类似的问题,但我找不到任何解决方案。
try:
with open('script.log', 'a') as f:
f.write('foo')
except FileNotFoundError:
print('foo')
我知道下面的代码应该可以工作,但理想情况下我想避免它,因为它包含 race condition :
if os.path.exists('script.log'):
with open('script.log', 'a') as f:
f.write('foo')
else:
print('foo')
最佳答案
使用os.open
和os.fdopen
单独而不是 open
.
"a"
open
使用的模式尝试使用标志 os.O_APPEND
打开文件和os.O_CREAT
,如果文件不存在则创建该文件。我们将使用os.fdopen
仅使用os.O_APPEND
标志,导致
一个FileNotFoundError
如果尚不存在则提出。
假设成功,我们将使用os.fdopen
包装 fdopen
返回的文件描述符在类似文件的对象中。 (不幸的是,这需要一个看似多余的 "a"
标志。)
import os
import sys
try:
fd = os.open('script.log', os.O_APPEND)
with os.fdopen(fd, "a") as f:
f.write("foo")
except FileNotFoundError:
print("foo")
关于python - 仅当文件已存在时才追加到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59735588/