私のアプリケーションには、以下の要求があります。 1. 1 つのスレッドが定期的にいくつかのログをファイルに記録します。ログ ファイルは一定の間隔でロールオーバーされます。ログファイルを小さく保つため。2. これらのログ ファイルを定期的に処理する別のスレッドもあります。例: ログ ファイルを別の場所に移動し、ログの内容を解析してログ レポートを生成します。
ただし、ログの記録に使用しているログ ファイルを 2 番目のスレッドが処理できないという条件があります。コード側では、擬似コードは次のようになります。
#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
このコードは機能しますが、ファイルが開いているかどうかを確認するためにファイルを削除したくないため、要求に到達できません。