在我的应用程序中,我有以下请求:
1. 有一个线程将定期记录一些日志到文件中。为了保持日志文件的小型化,日志文件将在一定时间间隔内进行翻转。
2. 还有另一个线程也会定期处理这些日志文件。例如:将日志文件移动到其他位置,解析日志内容以生成一些日志报告。
但是,有一个条件是第二个线程不能处理正在使用来记录日志的日志文件。在代码方面,伪代码类似于下面的样子:
我试过这份代码,但无论是使用 "r+" 还是 "a+" 标记都无法正常工作。
但是,有一个条件是第二个线程不能处理正在使用来记录日志的日志文件。在代码方面,伪代码类似于下面的样子:
#code in second thread to process the log files
for logFile in os.listdir(logFolder):
if not file_is_open(logFile) or file_is_use(logFile):
ProcessLogFile(logFile) # move log file to other place, and generate log report....
那么,如何检查文件是否已经打开或被其他进程使用? 我在互联网上进行了一些研究,并得出了一些结果:
try:
myfile = open(filename, "r+") # or "a+", whatever you need
except IOError:
print "Could not open file! Please close Excel!"
我试过这份代码,但无论是使用 "r+" 还是 "a+" 标记都无法正常工作。
try:
os.remove(filename) # try to remove it directly
except OSError as e:
if e.errno == errno.ENOENT: # file doesn't exist
break
这段代码可以运行,但不能满足我的要求,因为我不想删除文件来检查它是否被打开。
os.remove
更改为ProcessLogFile
吗?也许可以调整错误编号:有EBUSY
和其他可以尝试。 - Lev Levitsky