为什么os.rename有时返回拒绝访问错误?

1 投票
4 回答
15586 浏览
提问于 2025-04-18 14:04

我在我的Python脚本中使用了os.rename()方法来重命名一个文件夹。这个脚本是每天由调度程序自动调用的。有时候,os.rename()函数会返回一个错误,

 [Error 5] Access is denied

但其他时候它都能正常工作。代码,

try:
  if(os.path.exists(Downloaded_Path)):
    os.rename(Downloaded_Path, Downloaded_Path + "_ByClientTool")
except Exception,e:
  print "Error !!", str(e)
  return 1

4 个回答

0

如果主机名没有以相同的方式“网络合格”,那么这个也会失败。

>>> os.renames(r'\\host.domain.com\joan\rocks', r'\\host\joan\jett\rocks')
WindowsError: [Error 5] Access is denied

>>> os.renames(r'\\host\joan\rocks', r'\\host\joan\jett\rocks')
>>>

>>> os.renames(r'\\host.domain.com\joan\rocks', r'\\host.domain.com\joan\jett\rocks')
>>>
2

如果你在尝试重命名一个文件夹时,发现有文件、应用程序或者其他文件夹正在打开,就会出现错误。你需要把这些打开的东西关掉,这样Windows才能把它们从快速访问列表中移除。这样做对我有效。

2

这个错误的意思是,调度程序用来运行这个程序的用户账户没有权限去重命名那个文件夹。

有时候这个程序能正常工作,有时候却不行,常见的原因是程序创建了一些需要重命名的文件夹,但不是所有的文件夹都能创建。

  • 程序直接创建的文件夹对运行程序的用户是可以修改的,所以可以重命名这些文件夹。
  • 但是,之前由其他程序创建的文件夹,默认情况下可能会限制运行程序的用户访问。

想了解更多关于Windows文件和文件夹权限的信息,可以查看这里: http://technet.microsoft.com/en-us/library/bb727008.aspx

6

我在Windows 10上遇到过类似的问题:有时候我的Python脚本无法重命名一个文件夹,但我手动重命名却没问题。

我使用了Sysinternal的handle.exe工具,发现是explorer.exe(也就是文件管理器)占用了我想重命名的文件夹的一个子文件夹。原来是文件管理器把这个子文件夹加到了它的“快速访问”部分,这样就阻止了我的脚本重命名这个文件夹。

最后,我在文件管理器中关闭了“在快速访问中显示常用文件夹”这个选项,路径是:查看 -> 选项 -> 常规 -> 隐私。

撰写回答