Foros del Web » Programando para Internet » Python »

Aplicación de Django que ejecute un shell script??

Estas en el tema de Aplicación de Django que ejecute un shell script?? en el foro de Python en Foros del Web. Hola! No sé si esto se puede hacer. Lo que pretendo es crear una aplicación en django que entre otras cosas ejecute un script en ...
  #1 (permalink)  
Antiguo 01/02/2011, 05:39
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 14 años
Puntos: 2
Aplicación de Django que ejecute un shell script??

Hola!
No sé si esto se puede hacer. Lo que pretendo es crear una aplicación en django que entre otras cosas ejecute un script en la shell de linux.

Tendría un archivo script.sh que tenga los comandos a ejecutar y, por ejemplo, cuando el usuario cargue una página, se ejecutaría este script en el servidor.

¿Es posible?
  #2 (permalink)  
Antiguo 01/02/2011, 06:07
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 14 años
Puntos: 2
Respuesta: Aplicación de Django que ejecute un shell script??

Bueno, he visto que se puede hacer con os.system. La forma sería la siguiente;

Código Python:
Ver original
  1. import os
  2. os.sytem('comando a ejecutar')

Lo que no sé es si a os.system, en vez de ponerle el código se le puede pasar un archivo que contenga el código que se quiere ejecutar, es decir:

Código Python:
Ver original
  1. import os
  2. os.sytem(script)
  #3 (permalink)  
Antiguo 01/02/2011, 08: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: Aplicación de Django que ejecute un shell script??

Si, si el script tiene un shebang y permisos de ejecución puedes hacer un
Código:
os.system("/ruta_del_script/script")
La ruta puede ser absoluta o relativa.
  #4 (permalink)  
Antiguo 02/02/2011, 02:53
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 14 años
Puntos: 2
Respuesta: Aplicación de Django que ejecute un shell script??

De acuerdo, ya lo he probado y funciona. Muchas gracias
  #5 (permalink)  
Antiguo 03/02/2011, 05:11
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 14 años
Puntos: 2
Respuesta: Aplicación de Django que ejecute un shell script??

Hola de nuevo!

Me gustaría que el script se ejecute en background y que por tanto, mientras se está ejecutando, el usuario pueda visitar otras páginas. Es que el script que tengo que ejecutar es un script para convertir formatos de vídeos, por lo que tarda bastante y no quisiera que los usuarios tuvieran que estar esperando todo el tiempo que dura la conversión.
¿Sabéis como podría hacerlo?

Gracias
  #6 (permalink)  
Antiguo 03/02/2011, 05:35
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Aplicación de Django que ejecute un shell script??

Lo podés hacer con el módulo popen2 (aunque ya no se aconseja su uso), o con el módulo subprocess.
O, si tu aplicación lo permite (que no hemos visto cómo está armada) iniciar un hilo separado (módulo threading) y que sea ese hilo el que haga la llamada a os.system.

Saludos.
  #7 (permalink)  
Antiguo 03/02/2011, 07:03
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 14 años
Puntos: 2
Respuesta: Aplicación de Django que ejecute un shell script??

Gracias, he usado el modulo threading y funciona.
  #8 (permalink)  
Antiguo 25/02/2011, 04:12
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 14 años
Puntos: 2
Respuesta: Aplicación de Django que ejecute un shell script??

Vuelvo a reavivar el hilo porque me ha surgido una duda. Tengo mi proceso ejecutándose en background (mientras el usuario puede visitar otras páginas), y prentendo que cuando termine de ejecutarse el proceso que está en modo background (el nuevo hilo que he creado), se ejecute una función determinada. Creo que leí que se podía hacer pero ahora no veo como.

Os dejo algo del código:

Código Python:
Ver original
  1. background = Convert(name, extension, settings.STATIC_ROOT)
  2. background.start()
  3.  
  4. class Convert(threading.Thread):
  5.     def __init__(self, name, ext, url):
  6.         threading.Thread.__init__(self)
  7.         self.name = name
  8.         self.ext = ext
  9.         self.url = url
  10.     def run(self):
  11.         os.system(settings.STATIC_ROOT + '/script/convert.sh ' + self.name + ' ' +   self.ext + ' ' + self.url)

Lo que quiero es que al terminar de ejecutarse el script convert.sh, se llame a una función determinada.
  #9 (permalink)  
Antiguo 25/02/2011, 08:50
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Aplicación de Django que ejecute un shell script??

pos creo que basta con que llames a esa función luego de la llamada a os.system del método run

Etiquetas: django, shell
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:21.