Foros del Web » Programando para Internet » PHP »

Ejecutar python desde PHP

Estas en el tema de Ejecutar python desde PHP en el foro de PHP en Foros del Web. Hola amigos, feliz año a to2 Me encuentro haciendo un panel de control para ver el estado de un equipo. El panel de control lo ...
  #1 (permalink)  
Antiguo 02/01/2014, 09:53
Avatar de jja
jja
 
Fecha de Ingreso: diciembre-2010
Ubicación: BCN
Mensajes: 47
Antigüedad: 13 años, 4 meses
Puntos: 0
Pregunta Ejecutar python desde PHP

Hola amigos, feliz año a to2

Me encuentro haciendo un panel de control para ver el estado de un equipo.

El panel de control lo estoy haciendo en PHP, y los valores del estado del equipo los recupero con un script python que almacena los valores en una BBDD (que posteriormente leo desde PHP).

Si lanzo el script python manualmente desde una shell, me funciona perfecto, guarda los datos en BBDD y despues el panel web PHP los lee sin problemas.

Pero si intento lanzar el script python desde un botón PHP desde el propio panel de control, no me arranca.

Utilizo el siguiente código:

Código PHP:
<?php
exec
('python getValues.py -s sonda -i 1 > /dev/null &');
?>
Por si les sirve de ayuda, el script python es un bucle permanente que solo se apaga matando el proceso. No se si tiene algo que ver.

¿Es posible lanzar desde PHP el script python en segundo plano verdad? ¿Y que luego el usuario pueda seguir navegando por el panel PHP?

gracias, salu2 amigos
__________________
El supremo arte de la guerra es someter al enemigo sin luchar.

Sun Tzu
  #2 (permalink)  
Antiguo 02/01/2014, 09:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ejecutar python desde PHP

Deberías ejecutar dicho script mediante un CRON-job o como servicio (el servicio es lo ideal) y no con PHP, de esa forma siempre estará corriedo en segundo plano independientemente de tu aplicación PHP.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 02/01/2014, 10:01
Avatar de jja
jja
 
Fecha de Ingreso: diciembre-2010
Ubicación: BCN
Mensajes: 47
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Ejecutar python desde PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
Deberías ejecutar dicho script mediante un CRON-job o como servicio (el servicio es lo ideal) y no con PHP, de esa forma siempre estará corriedo en segundo plano independientemente de tu aplicación PHP.
Gracias, es buena idea. Pero lo que necesito es que el usuario desde el panel de control PHP pueda darle a un boton y lanzar el script, y pulsar a otro boton, y pararlo.
__________________
El supremo arte de la guerra es someter al enemigo sin luchar.

Sun Tzu
  #4 (permalink)  
Antiguo 02/01/2014, 10:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ejecutar python desde PHP

Cita:
Iniciado por jja Ver Mensaje
Gracias, es buena idea. Pero lo que necesito es que el usuario desde el panel de control PHP pueda darle a un boton y lanzar el script, y pulsar a otro boton, y pararlo.
¿El script de python es el mismo para todos los usuarios o cada usuario tiene un script personalizado?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 02/01/2014, 10:05
Avatar de jja
jja
 
Fecha de Ingreso: diciembre-2010
Ubicación: BCN
Mensajes: 47
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Ejecutar python desde PHP

Es el mismo script, solo que se le llama con parámetros distintos en función de la sonda que el usuario quiera ejecutar.

Gracias por el apoyo
__________________
El supremo arte de la guerra es someter al enemigo sin luchar.

Sun Tzu
  #6 (permalink)  
Antiguo 02/01/2014, 10:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ejecutar python desde PHP

Oh, ya entiendo.

Entonces si te toca investigar bastante sobre como ejecutar otros procesos mediante PHP, y sobre todo, poder detenerlos a voluntad. Yo nunca lo he hecho así que de pronto no podría ayudarte.

Lo único que se me ocurriría, es usas un único script de python y que tome dichos argumentos de un archivo de configuración o base de datos, así desde PHP únicamente alteras los parámetros pero no la ejecución del proceso en si.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 02/01/2014, 15:00
Avatar de jja
jja
 
Fecha de Ingreso: diciembre-2010
Ubicación: BCN
Mensajes: 47
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Ejecutar python desde PHP

El tema del botón de apagado lo tengo resuelto, porque almaceno en bbdd el estado del botón y desde Python compruebo si tiene que pararse, y hago un break en el bucle infinito para finalizar su ejecución.

Mi único problema es arrancar el script Python desde php, que en teoría es lo sencillo pero no me funciona...

Gracias
__________________
El supremo arte de la guerra es someter al enemigo sin luchar.

Sun Tzu
  #8 (permalink)  
Antiguo 03/01/2014, 10:19
Avatar de jja
jja
 
Fecha de Ingreso: diciembre-2010
Ubicación: BCN
Mensajes: 47
Antigüedad: 13 años, 4 meses
Puntos: 0
Pregunta Respuesta: Ejecutar python desde PHP

Hola,

He conseguido ejecutar ya el script python desde PHP con el siguiente código:

Código PHP:
$query='python getValues.py -s sonda -i 1';
$output=array();
exec($query$output);
foreach(
$output as &$valor)
{
            echo 
$valor.'<br/>';

El problema es que en el script (os lo comparto a continuación) nunca me salta el on_status, o eso creo, porque por pantalla me pinta "llego1" pero nunca llega a pintarme "llego2":

Código Python:
Ver original
  1. #! /usr/bin/env python
  2. import sonda
  3. from unidecode import unidecode
  4. import datetime
  5. import optparse
  6. import MySQLdb as mdb
  7. import sys
  8.  
  9. class StdOutListener(sonda.StreamListener):
  10.  
  11.     def on_status(self, status):
  12.  
  13.         con = mdb.connect('-', '-', '-', '-')
  14.         cur = con.cursor()
  15.         cur.execute("INSERT INTO sonda(estado) VALUES (%s)",(unidecode(status.sonda).encode('latin1')))
  16.         con.commit()
  17.         con.close()
  18.         return True
  19.  
  20.     def on_error(self, status_code):
  21.         return True
  22.  
  23.     def on_timeout(self):
  24.         return True
  25.  
  26.     def on_limit(self, status):
  27.         print 'Tope limite'
  28.  
  29. if __name__ == '__main__':
  30.  
  31.     parser = optparse.OptionParser('usage %prog -s <sonda> -i <numero>')
  32.     parser.add_option('-s', dest='son', type='string', help='Pon sonda')
  33.     parser.add_option('-i', dest='num', type='int', help='Pon numero')
  34.     (options, args) = parser.parse_args()
  35.     son = options.son
  36.     num = options.num
  37.  
  38.     if search == None:
  39.         exit(0)
  40.     else:
  41.         stream = sonda.Stream(StdOutListener())
  42.         print "llego1"
  43.         stream.filter(track=[s])
  44.         print "llego2"

Gracias
__________________
El supremo arte de la guerra es someter al enemigo sin luchar.

Sun Tzu

Etiquetas: python
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 14:08.