从Python强制删除Windows目录

3 投票
1 回答
2163 浏览
提问于 2025-04-16 09:51

可能重复的问题:
当文件夹在Windows资源管理器中打开时,DirectoryInfo.Delete(True)无法删除

大家好,我正在写一个Python测试工具,这个项目的一部分是每晚卸载一个应用程序,然后再重新安装。卸载的过程中需要删除数据目录。在白天,测试人员和开发者会登录到电脑,有时会留下命令提示符窗口或日志文件窗口开着。这就导致我的脚本失败,因为Windows不允许我删除一个文件,如果有其他程序正在使用它。

我想知道是否可以获取到正在占用这个文件的进程的PID(进程ID),这样我就可以用WMI或者其他方法结束这个进程?我希望能在不注销用户的情况下做到这一点。

如果这不可能,那有没有办法通过Python强制注销所有用户,以便我的脚本可以继续运行,而不需要等我来手动结束进程或注销用户呢?

任何建议都非常欢迎。我不是一个有经验的Windows程序员。

1 个回答

1

看起来sysinternals提供了一个解决方案。

handle.exe可以完成这个任务。

你可以使用系统调用(比如在Python中用subprocess模块),然后在输出中查找你想删除的目录。找到对应的进程ID(pid),接着再用另一个系统调用去运行psKill.exe来结束这个进程。

我还没有写代码,但我在命令行中试过这个过程,确实有效。用任何编程语言写个脚本来调用psTools应该是很简单的。

撰写回答