我在Python中有一些代码如下:
folderPath = 'C:\Program Files (x86)\Program\folder/' + folderName
if not os.path.exists(folderPath):
shutil.copytree('C:\Program Files (x86)\Program\folder\anotherfolder', folderPath)
变量folderName来自用户输入,基本上我的程序允许用户创建一个文件夹,然后另一个文件夹中的一些内容被复制到新文件夹中。您可以将其视为各种文件备份系统。
奇怪的是这个。它工作得很好,文件夹被创建(如shutil文档中所述),另一个文件夹的内容被复制,但是,引发了错误:
[error] script [ myScript ] stopped with error in line 52
[error] shutil.Error ( ['C:\\Program Files (x86)\\Program\\folder\\anotherfolder', 'C:\\Program
Files (x86)\\Program\\folder\\test', "[Errno 5] Input/output error: 'C:\\\\Program Files
(x86)\\\\Program\\\\folder\\\\test'"] )
在这种情况下,我输入的folderName是'test'。第52行是shutil.copytree()调用。
我的脚本然后停止运行,即使文件全部被复制并且它运行良好。
如何忽略这个(如果可能的话)并继续使用脚本?或者我如何解决这个问题,如果这可能确实是我的代码问题?
感谢所有帮助。
提前致谢。
答案 0 :(得分:2)
进一步挖掘:
根据microsoft,errno 5对应于拒绝访问。
copytree
使用copy2()
复制文件,然后更改其权限次数。
恕我直言,您无权更改(或检索)文件属性,因此您可以使用自己拥有的任何属性(您的用户,组...)获取该文件。
HTH
答案 1 :(得分:1)
jython中的shutil存在问题,请参阅http://bugs.jython.org/issue1872
然而,这应该不是你的问题?
你的路径中有一个正斜杠(/),这可能不太好。为了使您的程序正常运行,请执行以下操作。
folderPath = 'C:\Program Files (x86)\Program\folder/' + folderName
if not os.path.exists(folderPath):
try:
shutil.copytree('C:\Program Files (x86)\Program\folder\anotherfolder', folderPath)
except Exception, exc:
print exc
这将捕获引发的错误。如果它再次发生,您应该能够获得有关错误的更详细信息。
你也可以使用:
folderPath = 'C:\Program Files (x86)\Program\folder/' + folderName
if not os.path.exists(folderPath):
try:
shutil.copytree('C:\Program Files (x86)\Program\folder\anotherfolder', folderPath)
except Exception:
import traceback
traceback.print_exc()
编辑:请注意您的问题仍然存在!异常/错误在except子句中捕获,因此程序不会崩溃。请参阅评论和Laur Ivan的回答。发生此错误的原因是您没有在Program Files目录中执行某些操作的访问权限。
我希望这会有所帮助。问候Xeun