python - 检查文件是否已写入或被另一个进程使用
问题描述
我试图找到以下问题的解决方案,但找不到任何好的解决方案。我有一个包含子文件夹和文件的文件夹。某些文件可能正在被另一个进程使用(另一个进程正在将数据写入数据(.mdf 文件))。
我只是想检查文件是否正在使用中。
结构:
A_Folder
Setup
Data1
.mdf-file1
.mdf-file2
Data2
Data3
Evaluation
就像是:
def file_in_use():
*your solution*
for file in folder:
if file_in_use(file):
print("file in use")
break
我正在使用 Win10、PyCharm 和 venv。
到目前为止,我尝试了其他“解决方案”:
- psutil(有效,但太慢)
- open(), os.rename - 对我不起作用
- 子进程也无法工作 - 无法找到我的文件名:使用 Amit Gupta 的方法,从下面的链接中,文件如下所示:“C:\Data\S_t_h\Sth\H001.mdf”
基本上我尝试了这个问题的所有内容:
from subprocess import check_output, Popen, PIPE
src = r"C:\Data\S_t_h\S-t-h\H001.mdf"
files_in_use = False
def file_in_use(src):
try:
lsout = Popen(['lsof', src], stdout=PIPE, shell=False)
check_output(["grep", src], stdin=lsout.stdout, shell=False)
except:
return False
return True
if file_in_use(src):
files_in_use = True
我得到: FileNotFoundError: [WinError 2] 系统找不到指定的文件
此链接建议设置
winerror-2-the-system-cannot-find-the-file-specified-python
shell=True
我得到“lsof”和“grep”现在找不到或错了。
这里是适用于我的 psutil 方法,但速度太慢(~10 秒)
import psutil
src = r"C:\Data\S_t_h\S-t-h\H001.mdf"
def has_handle(src):
for proc in psutil.process_iter():
try:
for item in proc.open_files():
if src == item.path:
return True
except Exception:
pass
return False
print(has_handle(src))
我的解决方案:
很抱歉延迟回答。它只是与:
try:
os.rename(src, src)
return False
except OSError: # file is in use
return True
我把它弄得比我猜的要复杂。但无论如何,感谢你们的反馈和批评。
解决方案
推荐阅读
- java - 在休眠类别中创建产品 - Transcient 问题
- matlab - 从单元格中查找独特的月-年组合
- image - ASP.NET Core:从外部站点获取图像并保存在服务器上
- sap-cloud-sdk - SAP Cloud SDK Spring 安全 JARS
- grafana - Graphite / Grafana:如何在查询中修改指标的分辨率?
- sql-server - Laravel如何创建流畅的查询生成器加入子查询
- android - Dialogflow 发送用户数据
- reactjs - React TypeScript:功能组件中 UseRef 的替代方案
- python - Python CSV Reader 无法正确打印行
- powershell - 使用 Powershell 添加 Active Directory 组