我是一名初学python程序员,用它来完成简单的管理任务。
我写了一个小的日志移动代码(因为我有一个系统可以生成很多日志文件,从服务器移动到存储)。
我在远程路径上的文件上获得权限错误在尝试复制时已被拒绝权限,因此将其包装在try:语句中尝试并通过传递错误但脚本仍在结束...第32行是shutil.copy2(位置,copylocation)。
基本路径是本地目录,日志目录是UNC路径(附加文件夹集)。文件夹在脚本中较早的文件系统中进行镜像。 (所以应该永远存在)。
其他尝试如os.remove工作正常。
如果有人能指出我的大方向,我们将不胜感激。
Traceback (most recent call last):
File "C:\Program Files (x86)\Log Mover\log_mover.py", line 32,
shutil.copy2 (location,copylocation)
File "C:\Python27\lib\shutil.py", line 127, in copy2
copyfile(src, dst)
File "C:\Python27\lib\shutil.py", line 82, in copyfile
with open(dst, 'wb') as fdst:
IOError: [Errno 13] Permission denied: '\\\\XXXX\\d$\\logs\\
logs/XXX\\XXX - 2012-07-03 21-49.XXXX'
☀could not delete:C:/logs/XX\XXX\XXX 2012-07-04 08-00-42.txt
Traceback (most recent call last):
for root, dirs, files in os.walk(basepath):
for filenames in files:
location = os.path.join(root, filenames)
try:
datemod = time.strftime("%Y%m%d%H",time.localtime(os.path.getmtime(location)))
except OSError:
print "count not get mod time:"+location
if datemod != currtime:
drive,path = os.path.splitdrive(location)
copylocation = str(logdir)+str(path)
try:
shutil.copy2 (location,copylocation)
except OSError:
print "could not copy"
pass
if os.path.getsize(location) == os.path.getsize(copylocation):
try:
os.remove(location)
print "Deleted"+location
except OSError:
print "could not delete:"+location
pass
else:
print "sizes dont match"
由于
肯尼
答案 0 :(得分:3)
当你遇到IOError时,你正试图捕获OSError。
添加:
except (OSError, IOError):
#some code
答案 1 :(得分:2)
shutil.copy2
会引发IOError
,但是您正在捕捉OSError
,所以它只是气泡过去,未被捕获。