Foros del Web » Programando para Internet » Python »

Como evitar que se pare la ejecucion de un script

Estas en el tema de Como evitar que se pare la ejecucion de un script en el foro de Python en Foros del Web. hola amigos espero me puedan ayudar, necesito que el script no deje de ejecutarse, en la imagen http://imageshack.us/photo/my-images/856/c2d5.png/ se puede observar el error, creería que ...
  #1 (permalink)  
Antiguo 06/12/2013, 12:38
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Como evitar que se pare la ejecucion de un script

hola amigos espero me puedan ayudar, necesito que el script no deje de ejecutarse, en la imagen http://imageshack.us/photo/my-images/856/c2d5.png/ se puede observar el error, creería que esto se soluciona con una exepcion pero no se implementarla, me podrían indicar un poco

este es mi codigo

Código Python:
Ver original
  1. # -*- coding: utf-8 -*-
  2. import pyinotify
  3. import psycopg2
  4.  
  5. class EventHandler(pyinotify.ProcessEvent):
  6.  
  7.     def process_IN_CREATE(self, event):
  8.     archivo = event.name
  9.     print "Archivo:",archivo
  10.     anno=archivo[5:9]
  11.     mes=archivo[9:11]
  12.     dia=archivo[11:13]
  13.     hora=archivo[14:16]
  14.     minuto=archivo[16:18]
  15.     segundo=archivo[18:20]
  16.     ruta=event.pathname
  17.     conn = psycopg2.connect(database="python", user="postgres", password="hoe798css", host="192.168.102.6", port="5432")
  18.     #conn = psycopg2.connect(database="python", user="postgres", password="hoe798cs", host="127.0.0.1", port="5432")
  19.     print "Opened database successfully"
  20.     cur = conn.cursor()
  21.     #print "INSERT INTO prueba VALUES(6,'2004-10-19 10:23:54','" + anno + "')"
  22.     cur.execute("INSERT INTO prueba VALUES(nextval('prueba_id_seq'),'"+ anno +"-"+ mes +"-"+ dia +" "+ hora +":"+ minuto +":"+ segundo +"','http://192.168.102.8/repo_webcam/balcones-ruiz/"+ archivo + "','"+ ruta +"')");
  23.    
  24.     conn.commit()
  25.     print "Records created successfully";
  26.     conn.close()
  27.    
  28.     print archivo
  29.  
  30. wm = pyinotify.WatchManager()
  31. mask = pyinotify.IN_CREATE
  32.  
  33. handler = EventHandler()
  34. notifier = pyinotify.Notifier(wm, handler)
  35. wdd = wm.add_watch('/monitoreo/camip/guali-ruiz', mask, rec=True)
  36. notifier.loop()


Última edición por Montes28; 06/12/2013 a las 12:59
  #2 (permalink)  
Antiguo 06/12/2013, 15:09
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Como evitar que se pare la ejecucion de un script

Si quieres ignorar los errores pon la excepción antes de ejecutar la consulta. Si quieres que funcione, construye correctamente tu consulta.


Saludos
__________________
Grupo Telegram Docker en Español
  #3 (permalink)  
Antiguo 06/12/2013, 17:41
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Como evitar que se pare la ejecucion de un script

Definitivamente el problema esta en como construyes tu consulta.

Damn! no importa de que lenguajes vengas o a cual vayas construir queries concatenando así cadenas es una mala practica.

Antes
Código Python:
Ver original
  1. "INSERT INTO prueba VALUES(nextval('prueba_id_seq'),'"+ anno +"-"+ mes +"-"+ dia +" "+ hora +":"+ minuto +":"+ segundo +"','http://192.168.102.8/repo_webcam/balcones-ruiz/"+ archivo + "','"+ ruta +"')"

Después
Código Python:
Ver original
  1. fecha = datetime.date(2013, 11, 18)
  2. url = "http://192.168.102.8/repo_webcam/balcones-ruiz/" + archivo
  3. cur.execute("INSERT INTO prueba VALUES(nextval('prueba_id_seq'), %s, %s, %s)", (fecha, url, ruta))
  #4 (permalink)  
Antiguo 06/12/2013, 17:49
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Como evitar que se pare la ejecucion de un script

Eso sin contar que archivo solo tiene dos caracteres.


Saludos
__________________
Grupo Telegram Docker en Español
  #5 (permalink)  
Antiguo 06/12/2013, 20:25
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Como evitar que se pare la ejecucion de un script

gracias por responder razpeitia y Carlangueitor, les voy a explicar un poco:

El nombre de los archivos tienen la siguiente estructura 20131128_120314M.jpg año_mes_dia_hora_minuto_segundo_M.jpg , estos archivos son copiados cada minuto en un servidor y con el nombre del archivo obtengo el año,mes.dia_hora,minuto y segundo, no me sirve la fecha de creacion del archivo en el servidor.

Código Python:
Ver original
  1. archivo = event.name
  2.     anno=archivo[5:9]
  3.     mes=archivo[9:11]
  4.     dia=archivo[11:13]
  5.     hora=archivo[14:16]
  6.     minuto=archivo[16:18]
  7.     segundo=archivo[18:20]

en la noche de ayer deje corriendo el script y esta manaña el script ya no estaba ejecutandose, segun lo que veo es que el nombre del archivo solo tenia dos caracteres y asi no se puedo hacer la insercion ya que el campo fecha es timestamp
  #6 (permalink)  
Antiguo 08/12/2013, 15:23
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Como evitar que se pare la ejecucion de un script

La línea 9 de tu script imprime, según lo que mandaste 05.
__________________
Grupo Telegram Docker en Español
  #7 (permalink)  
Antiguo 08/12/2013, 18:41
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Como evitar que se pare la ejecucion de un script

Carlangueitor pero que me recomiendas ,utilizo un if para validar la longitud del nombre del archivo? o trato la excepcion del insert?
  #8 (permalink)  
Antiguo 08/12/2013, 20:26
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Como evitar que se pare la ejecucion de un script

Te recomiendo que obtengas correctamente el nombre del archivo en lugar de ignorar los errores de tu código.

Estoy 100% seguro que event.pathname es diferente a event.name.
__________________
Grupo Telegram Docker en Español
  #9 (permalink)  
Antiguo 08/12/2013, 20:42
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Como evitar que se pare la ejecucion de un script

Carlangueitor tienes toda la razon event.pathname es diferente a event.name.

yo lo que haria es utilizar un if validar si el nombre del archivo tiene la longitud 20 caracteres (20131128_120314M.jpg) si esto se cumple que inserte en la base de datos y si no pues que no haga nada.

Pero ese archivo no lo tendria encuenta y en a la hora de consultar en la base de datos seria como si no llego el archivo y en realidad si llego pero el script dejo de ejecutarse

me parece raro es porque en el codigo se esta esperando que se grabe el archivo en disco def process_IN_CREATE(self, event) en el servidor no existe ningun proceso para cambiar el nombre.
  #10 (permalink)  
Antiguo 11/12/2013, 13:16
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Como evitar que se pare la ejecucion de un script

Amigos lo solucione un if midiento el tamaño del string

Código Python:
Ver original
  1. tamano = len(archivo)
  2.     if tamano == 25:
  3.         anno=archivo[5:9]
  4.         mes=archivo[9:11]
  5.         dia=archivo[11:13]
  6.         hora=archivo[14:16]
  7.         minuto=archivo[16:18]
  8.         segundo=archivo[18:20]


tengo problemas es con el insert

Código Python:
Ver original
  1. cur.execute("INSERT INTO prueba VALUES(nextval('prueba_id_seq'), %s, %s, %s,%s, %s, %s,%s,%s)", (anno,mes,dia,hora,minuto,segundo,url,ruta))

obtengo este error
Cita:
File "balcones-ruiz.py", line 26, in process_IN_CREATE
cur.execute("INSERT INTO prueba VALUES(nextval('prueba_id_seq'), %s, %s, %s,%s, %s, %s,%s,%s)", (anno,mes,dia,hora,minuto,segundo,url,ruta))
psycopg2.ProgrammingError: INSERT has more expressions than target columns
LINE 1: ...S(nextval('prueba_id_seq'), E'2013', E'12', E'11',E'14', E'0...
  #11 (permalink)  
Antiguo 11/12/2013, 13:31
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Como evitar que se pare la ejecucion de un script

El error te marca que tienes mas valores que columnas.

Como te dije antes, año, mes, dia, hora, minuto y segundo es (quiero pensar) un campo en tu tabla. Así que solo debes de pasarle un objeto datetime y eso arreglara todo.

Ejemplo
Código Python:
Ver original
  1. import datetime
  2. # ...
  3. timestamp = datetime.datetime(anno, mes, dia, hora, minuto, segundo)
  4. cur.execute("INSERT INTO prueba VALUES(nextval('prueba_id_seq'), %s, %s, %s)", (timestamp, url, ruta))

Otra cosa, especifica las columnas en tu query.
  #12 (permalink)  
Antiguo 11/12/2013, 13:56
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Como evitar que se pare la ejecucion de un script

Cita:
INSERT has more expressions than target columns
Necesitas un buen manual de SQL.


Saludos
__________________
Grupo Telegram Docker en Español

Etiquetas: ejecucion, ip
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:59.