В моем приложении у меня есть следующие запросы: 1. Существует один поток, который будет регулярно записывать некоторые журналы в файл. Файл журнала будет опрокинут в определенном интервале. для хранения файлов журнала. 2. Существует и другой поток, который будет регулярно обрабатывать эти файлы журналов. ex: переместите файлы журнала в другое место, проанализируйте содержимое журнала, чтобы сгенерировать несколько отчетов журнала.
Но есть условие, что второй поток не может обработать файл журнала, который используется для записи журнала. в кодовой части, псевдокодные аналоги, как показано ниже:
#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
Этот код может работать, но он не может связаться с моим запросом, так как я не хочу удалять файл, чтобы проверить, открыт ли он.