【问题标题】:Kill all processes locking a file杀死锁定文件的所有进程
【发布时间】:2019-07-09 07:33:49
【问题描述】:

当我运行 Python 脚本时,有时会收到以下错误:

"进程无法访问该文件,因为它正被 另一个进程”

现在我想知道:python 中有没有办法:

  1. 检测哪个进程正在使用该文件?
  2. 关闭此进程? (例如使用os.system('taskkill /f /im PROCESS.exe)

【问题讨论】:

  • 有一个方便的工具。它被称为“解锁器”。
  • @Jean-FrançoisFabre 你能分享到项目页面的链接吗?我在 Google 上第一眼找不到它。
  • @Jean-FrançoisFabre 啊,我明白了。实际上,我一直在寻找一种 pythonic 的方式,因为我需要自动完成。
  • 也许该工具有批处理模式。无论如何,只要锁定的文件是本地文件,并且您以提升的权限运行

标签: python windows process


【解决方案1】:

如果你需要的文件与 psutil 匹配,你可以尝试迭代进程并杀死它:

import psutil


for p in psutil.process_iter():
try:
    if "filename" in str(p.open_files()):
        print(p.name())
        print("^^^^^^^^^^^^^^^^^")
        p.kill()
except:
    continue

【讨论】:

  • 感谢您的回答。文件名必须包含完整路径还是仅包含存储 python 脚本的文件夹的相对路径?
  • 取决于文件名,如果是唯一的你可以只使用文件名,否则你也可以添加路径(如果名称是常用的,你可能会杀死其他进程)。
  • 这是 viber 打开文件的示例输出,它使用完整的文件路径:psutil.Process(pid=12756, name='Viber.exe', started='2019-07-04 10:39:15') [popenfile(path='C:\\Users\\"user"\\AppData\\Roaming\\ViberPC\\359899180789\\viber.db-wal'...
  • 我明白了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
相关资源
最近更新 更多