Buenas a todos,
os comento mi problema, tengo un servidor Apache corriendo con sitios virtuales y con mod_wsgi implementado, hasta aqui todo correcto, ahora viene la duda..
Tengo mi aplicación en Python preparada:
import serial
a = serial.Serial('/dev/ttyACM0', 9600)
while 1 == 1:
a.write(1)
Necesito ejecutar esto desde una interfaz web, lo he realizado de la forma mas cazurra que se me ha ocurrido que ha sido en el html ingresar lo siguiente:
<a href="ruta del python"><button>Encender</button></a>
Esto no funciona, era de esperar :xD
¿Sabeis como podria implementarle en la interfaz web?
esto puede servirte?
http://stackoverflow.com/questions/9145517/executing-a-python-script-in-apache2 (http://stackoverflow.com/questions/9145517/executing-a-python-script-in-apache2)
http://www.linux.com/community/blogs/129-servers/757148-configuring-apache2-to-run-python-scripts (http://www.linux.com/community/blogs/129-servers/757148-configuring-apache2-to-run-python-scripts)
Gracias por responder engel lex,
puede que me sirva, pero antes necesito saber que error me da, para ello necesito ejecutarlo, es decir a lo que me vengo refiriendo es que necesito ejecutarlo.
Como si en el terminal escribiera "python on.py"
¿Sabes con que código puedo hacer un boton que lo llame? O si es necesario declararlo como una función y llamar a la función, me es indiferente el método.
Mi árbol de directorios lo tengo dispuesto de esta manera ahora mismo
testing/
├── __init__.py
├── manage.py
├── public_html
│ └── index.html
└── testing
├── __init__.py
├── off.py
├── on.py
├── settings.py
├── test.wsgi
├── urls.py
└── wsgi.py
El conf del servidor virtual lo tengo dispuesto de esta manera:
<VirtualHost *:80>
ServerName test.com
ServerAlias www.test.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/testing/public_html/
WSGIScriptAlias /var/www/testing/public_html /var/www/testing/testing/test.wsgi
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
¿Alguna idea? :)
Tienes mod_python para Apache:
http://modpython.org/
Lo instalas y deberias poder correr .py con solo llarmalo desde la URL. Depende de ti si quieres poner un AJAX a un boton para que llame al archivo.
MinusFour,
antes de nada muchas gracias por participar, desde un principio estuve viendo las opciones y mod_python estaba entre ellas, el problema esta en que mod_python por lo que he leido ya esta obsoleto y tiene riesgos de seguridad, asi que me gustaria hacerlo de la forma correcta directamente.
Pero nuevamente muchas gracias por participar.
¿Exactamente cual es el problema con tu modulo WSGI entonces? ¿Se ejecuta o no tu script? Revisa el log de errores de apache por si se ejecuto el programa, pero si hubo algun fallo.
No se ejecuta el script y me da la impresión de que me estoy inventando el codigo para llamar al modulo python.
En el log no tengo ningun error.
:rolleyes:
Le estoy echando un vistazo a django haber si puedo solucionar algo
Cita de: Cr4id3r en 26 Octubre 2014, 21:52 PM
No se ejecuta el script y me da la impresión de que me estoy inventando el codigo para llamar al modulo python.
En el log no tengo ningun error.
:rolleyes:
Le estoy echando un vistazo a django haber si puedo solucionar algo
¿Llamas al script, pero no se ejecuta? ¿Te regresa el texto del script? Vas a tener que asegurarte que tengas el handler puesto correctamente. Me parece que hay unas directivas del modulo que puedes usar para eso:
WSGIScriptAlias
Mira la documentación de mod wsgi:
https://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide
Y ojo que el mod_wsgi no es para ejecutar cualquier codigo en python, si no que tiene que implementar la especificacion de WSGI. Creo que es posible desde un controlador de Django (ya que este si la implementa).
De lo contrario vas a tener que correr el archivo python por CGI o por el modulo mod_python.
MinusFour, por lo que estoy viendo mi problema esta viniendo de Django, voy a estudiarlo un poco y haber que saco en claro, en cuanto lo solucione posteo para que todos tengamos la solución 😉
Cita de: Cr4id3r en 27 Octubre 2014, 20:01 PM
MinusFour, por lo que estoy viendo mi problema esta viniendo de Django
¿Estás usando Django? Hasta donde tenia entendido, tu querias correr una aplicación de python que no se adhiere al estandard WSGI de python. Aunque mencione que puedes ejecutar el código desde un controlador de Django, yo creo que es mucho para montarse una aplicación tan sencilla. Claro que si ahora te estas pensando en montarte toda una web por Django pues entonces si.
Desde mi punto de vista lo mejor sería leerse WSGI:
Ejemplo de Script
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
#Tu Codigo aqui
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
Configuracion del VirtualHost:
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
ServerAdmin webmaster@example.com
DocumentRoot /usr/local/www/documents
<Directory /usr/local/www/documents>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/myapp.wsgi
<Directory /usr/local/www/wsgi-scripts>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Finalmente ya he conseguido solucionarlo,
me faltaba un archivo y configurar correctamente el sitio.conf de sites-available
en primer lugar he tenido que crear un archivo que controle las peticiones, lo creamos donde queramos, en mi lugar lo cree en el proyecto.
proyecto.wsgi
import os
import sys
sys.path = ['/var/www/testing'] + sys.path
os.environ['DJANGO_SETTINGS_MODULE'] = 'testing.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Ahora configuramos nuestro sitio virtual proyecto.conf en sites-available
<VirtualHost *:80>
WSGIScriptAlias / /var/www/testing/testing.wsgi
Servername test.com
Alias /static /var/www/testing/static/
<Directory /var/www/testing/>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Se ve que me fui demasiado por las ramas :xD
Ahora que ya tengo el entorno preparado, empezare el proyecto, si todo sale bien intentare realizar un tutorial para controlar componentes electronicos por interfaz web.
Un saludo y muchas gracias por la aydua ;)