Tôi là ứng dụng của tôi, tôi có yêu cầu dưới đây: 1. Có một chuỗi sẽ ghi lại một số nhật ký trong hồ sơ. Tệp nhật ký sẽ được rollovered trong khoảng thời gian nhất định. để giữ các tệp nhật ký nhỏ. 2. Có một luồng khác cũng sẽ thường xuyên xử lý các tệp nhật ký này. ví dụ: Di chuyển các tệp nhật ký sang vị trí khác, phân tích cú pháp nội dung của nhật ký để tạo một số báo cáo nhật ký.Kiểm tra xem tệp có mở hay không (không được sử dụng bởi quy trình khác) trong Python
Nhưng, có một điều kiện là luồng thứ hai không thể xử lý tệp nhật ký đang sử dụng để ghi nhật ký. ở phía mã, các mô phỏng giả như sau:
#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....
Vì vậy, làm cách nào để kiểm tra là tệp đã được mở hoặc đang được sử dụng bởi quy trình khác? Tôi đã thực hiện một số nghiên cứu trên internet. Và có một số kết quả:
try:
myfile = open(filename, "r+") # or "a+", whatever you need
except IOError:
print "Could not open file! Please close Excel!"
Tôi đã thử mã này, nhưng nó không hoạt động, bất kể tôi sử dụng "r +" hoặc "a +" cờ
try:
os.remove(filename) # try to remove it directly
except OSError as e:
if e.errno == errno.ENOENT: # file doesn't exist
break
Mã này có thể làm việc, nhưng nó không thể đạt yêu cầu của tôi, vì tôi không muốn xóa tệp để kiểm tra xem tệp có đang mở hay không.
Bạn đã cố gắng thay đổi 'os.remove' thành' ProcessLogFile' bên trong khối 'try' cuối cùng chưa? Có thể điều chỉnh số lỗi: có 'EBUSY' và [others] (http://docs.python.org/library/errno.html) để thử. –
Bạn có thể muốn đọc câu hỏi này http://stackoverflow.com/questions/2023608/check-what-files-are-open-in-python và đặc biệt là http://stackoverflow.com/a/7142094/546873 câu trả lời – Nicoretti
này Cách thực hiện những điều tương tự trên nền tảng Windows để liệt kê các tệp đang mở. – zengwke