[英]Append to file only if it already exists
在我的脚本开始时,文件script.log
应该存在并且消息被附加到它。 但是如果该文件不存在(用户已决定删除该文件),则不应再次创建该文件,而是将消息打印到stdout
。 仅当您看到它时才填充桶。
怎么做?
一定有很多人遇到过类似的问题,但我找不到任何解决方案。
if os.path.exists('script.log'):
with open('script.log', 'a') as f:
f.write('foo')
else:
print('foo')
我知道以下代码应该可以工作,但理想情况下我想避免它,因为它包含竞争条件:
if os.path.exists('script.log'): with open('script.log', 'a') as f: f.write('foo') else: print('foo')
单独使用os.open
和os.fdopen
而不是open
。
open
使用的"a"
模式尝试使用标志os.O_APPEND
和os.O_CREAT
打开文件,如果文件不存在则创建文件。 我们将使用os.fdopen
仅使用os.O_APPEND
标志,如果它不存在,则会引发FileNotFoundError
。
假设它成功,我们将使用os.fdopen
将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")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.