Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] releer fichero en demonio phyton

Estas en el tema de releer fichero en demonio phyton en el foro de Python en Foros del Web. hola, estoy bastante pez con el tema del python pero me he visto en la necesidad de hacer un scripcillo para un programa q monitoriza ...
  #1 (permalink)  
Antiguo 04/12/2014, 14:10
 
Fecha de Ingreso: junio-2003
Mensajes: 122
Antigüedad: 21 años, 5 meses
Puntos: 0
Pregunta releer fichero en demonio phyton

hola,

estoy bastante pez con el tema del python pero me he visto en la necesidad de hacer un scripcillo para un programa q monitoriza unos ficheros.
el caso es que no se muy bien como hacer para que una vez el script en python está ejecutandose y que lee unos ficheros con un contenido numerico. cuando este fichero cambia, pq se actualiza cada 5min vuelva el demonio de script python a cargar el fichero abierto y use los nuevos valores.

No se si me he explicado bien..
os dejo el script para ver cómo lo véis y si me podéis decir cómo hacer para recargar estos ficheros que lee el script python:


----

Código Python:
Ver original
  1. #!/usr/bin/env /usr/bin/python
  2.  
  3. import subprocess
  4. import re
  5. import sys
  6. import time
  7. from datetime import datetime
  8. import httplib
  9.  
  10. import logging
  11. import logging.handlers
  12. import argparse
  13. import sys
  14. import time # this is only being used as part of the example
  15.  
  16. delay = 360
  17.  
  18. tempout = open("/home/pi/projects/tempo1.txt")
  19. tempout1 = tempout.read(8)
  20. tempout1 =float(tempout1)* 1.8 + 32
  21. tempout.close()
  22. #print tempout
  23.  
  24.  
  25.  # upload data to mi_web
  26.   try:
  27.         conn = httplib.HTTPConnection("miweb.com")
  28.         path = "/blablalba/blabalba?ID=xxxxxxxxx&PASSWORD=clave_pass&dateutc=" + str(datetime.utcnow().isoformat()) + "&humidity=" + str(humidity) + "&tempf=" + str(tempo
  29. ut1) + "&baromin=" + str(press1) + "&softwaretype=status=updateraw"
  30.         conn.request("GET", path)
  31.         res = conn.getresponse()
  32.     print path
  33.  
  34.  
  35.     # checks whether there was a successful connection (HTTP code 200 and content of page contains "success")
  36.         if ((int(res.status) == 200) & ("success" in res.read())):
  37.                 print "%s - Successful Upload\nTemp: %.1f F, Humidity: %.1f %%\nNext upload in %i seconds\n" % (str(datetime.now()), temp, humidity, delay)
  38.         else:
  39.                 print "%s -- Upload not successful, check username, password, and formating.. Will try again in %i seconds" % (str(datetime.now()), delay)
  40.   except IOError as e: #in case of any kind of socket error
  41.         print "{0} -- I/O error({1}): {2} will try again in {3} seconds".format(datetime.now(), e.errno, e.strerror, delay)
  42.  
  43.   # Wait before re-uploading data
  44.   time.sleep(delay)

-----

El fichero que necesito que se vuelva a leer en el demonio phyton de este script es tempo1.txt.. pero se queda abierto en el demonio y no hay forma que vuelva a cargarlo al pasar los 350segunds aprox.

alguna ayuda, please??

gracias!

Última edición por razpeitia; 04/12/2014 a las 21:05
  #2 (permalink)  
Antiguo 04/12/2014, 21:20
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: releer fichero en demonio phyton

Algunas sugerencias:

Haz intentando crear un tarea programada usando cron?

Puedes usar watchdog para usar ejecutar comandos cuando exista un cambio en un archivo.

Con respecto a tu script original, has intentado meterlo en un ciclo y correr este proceso demonizado?

Código Python:
Ver original
  1. delay = 360
  2. while True:
  3.     tempout = open("/home/pi/projects/tempo1.txt")
  4.     tempout1 = tempout.read(8)
  5.     tempout1 =float(tempout1)* 1.8 + 32
  6.     tempout.close()
  7.     #print tempout
  8.  
  9.     # upload data to mi_web
  10.     try:
  11.         conn = httplib.HTTPConnection("miweb.com")
  12.         path = "/blablalba/blabalba?ID=xxxxxxxxx&PASSWORD=clave_pass&dateutc=" + str(datetime.utcnow().isoformat()) + "&humidity=" + str(humidity) + "&tempf=" + str(tempout1) + "&baromin=" + str(press1) + "&softwaretype=status=updateraw"
  13.         conn.request("GET", path)
  14.         res = conn.getresponse()
  15.     print path
  16.  
  17.  
  18.     # checks whether there was a successful connection (HTTP code 200 and content of page contains "success")
  19.         if ((int(res.status) == 200) & ("success" in res.read())):
  20.                 print "%s - Successful Upload\nTemp: %.1f F, Humidity: %.1f %%\nNext upload in %i seconds\n" % (str(datetime.now()), temp, humidity, delay)
  21.         else:
  22.                 print "%s -- Upload not successful, check username, password, and formating.. Will try again in %i seconds" % (str(datetime.now()), delay)
  23.     except IOError as e: #in case of any kind of socket error
  24.         print "{0} -- I/O error({1}): {2} will try again in {3} seconds".format(datetime.now(), e.errno, e.strerror, delay)
  25.  
  26.     # Wait before re-uploading data
  27.     time.sleep(delay)

Código BASH:
Ver original
  1. nohup python myscript.py
  #3 (permalink)  
Antiguo 05/12/2014, 02:44
 
Fecha de Ingreso: junio-2003
Mensajes: 122
Antigüedad: 21 años, 5 meses
Puntos: 0
Pregunta Respuesta: releer fichero en demonio phyton

Hola,

lo primero, muchas gracias por la ayuda y respuesta.

Si he pensado en meterlo como dices, pero tampoco temrina de funcionar bien y me carga siempre la misma lectura del fichero.
El tema de hacerlo via python es pq tengo el fichero agregado como srvicio del mi linux y en caso de falla del sistema pues este arranca automaticamente sin intervención "humana"así no tengo que estar pendiente de si está ejecutandose o no...

por otra parte, en agregarlo dentro del Loop, lo he intentado exactamente como comentas, de hecho es lo prmero que pensé.. pero no hay forma, cuando lo hago y ejecuto el script me canta este error:

---
File "pi_wunderground.py", line 38
tempout = open("/home/pi/projects/wunderground/Raspberry_Pi_wunderground/tempo1.txt")
^
IndentationError: expected an indented block

---

¿alguna idea de por qué puede ser..?

gracias!
__________________
startwav

http://e-hosting.startwave.com/img/banner.gif
Internet Nunca ha estado más cerca de Tí. e-Hosting Start Wave Media . Todo lo que necesitas para tener presencia en Internet.
Servicios de Registro Dominios / DNS / HOSTING / Y MUCHO MÁS...
  #4 (permalink)  
Antiguo 05/12/2014, 03:35
 
Fecha de Ingreso: junio-2003
Mensajes: 122
Antigüedad: 21 años, 5 meses
Puntos: 0
Respuesta: releer fichero en demonio phyton

wowowowow!!

parece que funciona!!!
había metido mal un ( y ahora va..!


muchas gracias de nuevo a todos!
__________________
startwav

http://e-hosting.startwave.com/img/banner.gif
Internet Nunca ha estado más cerca de Tí. e-Hosting Start Wave Media . Todo lo que necesitas para tener presencia en Internet.
Servicios de Registro Dominios / DNS / HOSTING / Y MUCHO MÁS...

Etiquetas: demonio, fichero, ip, valor
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 09:30.