【问题标题】:Closing a file so I can delete it on Windows in Python?关闭文件以便我可以在 Windows 上用 Python 删除它?
【发布时间】:2015-09-17 20:48:25
【问题描述】:

因此,假设您有一个 python 模块 black_box,您将其导入到您的 python 脚本中。你向这个模块 black_box 传递一个文件路径,如下所示:

import black_box
import os

file_path = r"C:\foo.txt"
black_box.do_something(file_path)
os.remove(file_path)

有时 black_box 模块会打开该文件并使其保持打开状态,但我需要删除 black_box 已打开的该文件。

我在 Windows 上收到一条错误消息:

WindowsError: [错误 32] 进程无法访问该文件,因为它正在 被另一个进程使用:C:\foo.txt

如何关闭文件以便删除它?

我无法更改 black_box 模块。

我没有 black_box 创建的文件处理程序。

black_box 不提供关闭文件。

【问题讨论】:

  • 模块是否提供关闭文件的方法?
  • 你不能不访问 black_box 生成的文件句柄。
  • 你需要杀死正在使用该文件的进程。
  • 在 Windows 中,当打开文件或目录的句柄时,必须明确允许删除的意图。具体来说,DeleteFile 尝试打开一个共享删除访问权限的句柄,如果之前打开的句柄不共享删除访问权限,则会失败。您可以使用未记录的系统调用来列出进程中的文件句柄,然后关闭特定文件的句柄,但是 black_box 模块在尝试使用关闭的句柄时可能会崩溃。

标签: python windows


【解决方案1】:

由于您无权访问黑匣子,您可以使用taskkill

import os
os.system("taskkill /im blackbox.exe")

然后你就可以删除你的文件了,副作用是,你的黑匣子会停止。

【讨论】:

  • 但是我导入了 black_box 模块。我将不得不杀死当前的 python 程序。
  • 如果你对你的模块有开源访问权并且你在你自己的python代码中使用它,那么你可能想要改变你的black_box的代码并添加一个'fileObject.close()'行在您的 black_box 的“返回”行之前。然后您就可以正常访问该文件了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
  • 2017-03-25
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
相关资源
最近更新 更多