如何在Python(DOS)中捕获shutil.copy()的返回值?

时间:2009-11-02 16:26:01

标签: python exception logging

我正在尝试将许多复制命令的成功或失败记录到日志文件中。我正在使用shutil.copy() - 例如

str_list.append(getbitmapsfrom) 
game.bigbitmap = "i doubt this is there.bmp"
str_list.append(game.bigbitmap)
source = '\\'.join(str_list)
shutil.copy(source, newbigbmpname)

我强制我的脚本中的一个复制命令失败,并且它生成了错误:

[Errno 2] No such file or directory: 'X:\PJ_public\PJ_Services\BSkyB-PlayJam\Content\P_NewPortal2009\1.0.0\pframes\i doubt this is is there.bmp'

这很棒,但是我可以捕获"Errno 2 No such file or directory"并将其写入日志文件吗? shutil.copy()是否返回整数值? - 我没有在Python文档中看到这个。

我想我也希望能够捕获返回值,这样脚本就不会在复制失败时爆炸 - 我试图让它继续而不管错误。

感谢。

3 个答案:

答案 0 :(得分:16)

您需要查看exceptions sectionPython tutorial。如果shutil.copy()没有找到其中一个参数,则会引发IOError异常。您可以从异常实例中获取消息。

try:
    shutil.copy(src, dest)
except IOError, e:
    print "Unable to copy file. %s" % e

答案 1 :(得分:4)

您很少会在Python中看到类似C的返回码,而是通过例外来表示错误。

记录结果的正确方法是:

try:
    shutil.copy(src, dest)
except EnvironmentError:
    print "Error happened"
else:
    print "OK"

答案 2 :(得分:2)

try:
    shutil.copy(archivo, dirs)
except EnvironmentError:
    print "Error en el copiado"
    escritura = "no se pudo copiar %s a %s \n" % (archivo, dirs)
else:
    print "Copiado con exito"
    escritura = "%s --> %s \n" % (archivo, dirs)
finally:
    log = open("/tmp/errorcreararboldats.log", "a")
    log.write(escritura)
    log.close()