2009-11-02 6 views
11

Estoy tratando de registrar el éxito o el fracaso de una serie de comandos de copia, en un archivo de registro. Estoy usando shutil.copy() - p.¿Cómo puedo capturar el valor de retorno de shutil.copy() en Python (en DOS)?

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) 

Forcé uno de los comandos de copia en mi guión a fallar, y se genera el error:

[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'

Esto es grande, pero puede capturar I "Errno 2 No such file or directory" y escribirla en un registro ¿archivo? ¿shutil.copy() devuelve un valor entero? - No veo esto descrito en los documentos de Python.

Supongo que también quiero poder capturar el valor de retorno, para que la secuencia de comandos no explote en una falla de copia - Estoy intentando que continúe independientemente de los errores.

Gracias.

Respuesta

16

Usted querrá mirar el exceptions section del Python tutorial. En el caso de que shutil.copy() no encuentre uno de los argumentos, se generará una excepción IOError. Puede obtener el mensaje de la instancia de excepción.

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

Rara vez verá códigos de retorno tipo C en Python, los errores se señalan por excepciones en su lugar.

La forma correcta de resultado de registro es:

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

muchas gracias, Alex y Jamessan - yo acabamos probado las excepciones y esto funciona un convite. – BeeBand

1
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() 
+0

fantástico. Gracias, esto es realmente útil. – BeeBand

Cuestiones relacionadas