¿Cómo creo una página web con botones que invocan varios scripts de Python en el sistema que sirve a la página web?

Soy un progtwigdor aficionado (y bastante nuevo) que ha escrito varios scripts útiles (para mí) en python para manejar diversas tareas de automatización del sistema que incluyen copiar, renombrar y descargar archivos entre otras actividades diversas.

Me gustaría crear una página web servida desde uno de mis sistemas que simplemente presentaría unos pocos botones que me permitirían iniciar estos scripts de forma remota.

El problema es que no sé por dónde empezar a investigar cómo hacerlo. Digamos que tengo un script llamado:

file_arranger.py

¿Qué necesito hacer para que una página web ejecute ese script? Esto no está destinado al consumo público, por lo que cualquier cosa ligera sería genial. Para obtener puntos de bonificación, ¿qué debo tener en cuenta para proporcionar al usuario web el resultado de dichos scripts?

edición: la primera respuesta me hizo darme cuenta de que olvidé incluir que este es un sistema Win2k3.

Esta página en el sitio de python tiene una buena descripción y un ejemplo de lo que necesita hacer para ejecutar un script CGI de python. Comience con el caso más simple primero. Solo haz un script corto que imprima html.

#!/usr/bin/python #on windows change to your path to the python exe print "Content-Type: text/html" # HTML is following print # blank line, end of headers print "CGI script output" print "

This is my first CGI script

" print "Hello, world!"

Cuando lo intentas por primera vez, la parte más difícil suele ser saber dónde colocar el script y cómo hacer que el servidor web lo reconozca y lo ejecute. Si está utilizando un servidor web apache, eche un vistazo a estos pasos de configuración .

Una vez que tenga este sencillo script en funcionamiento, solo tendrá que agregar un formulario html y una etiqueta de botón y usar la propiedad de acción para señalarlo a los scripts que desea ejecutar.

Este enfoque simple no requiere nada, excepto la biblioteca estándar de Python. Crea esta estructura de directorios:

 . |-- cgi-bin | `-- script.py |-- index.html `-- server.py 

Usted coloca sus scripts en el directorio “cgi-bin”, “index.html” contiene enlaces a los scripts en el directorio “cgi-bin” (de modo que no tiene que escribirlos manualmente, aunque podría) y “server.py “contiene esto:

 import CGIHTTPServer CGIHTTPServer.test() 

Para ejecutar su servidor, simplemente ejecute “server.py”. Eso es todo, no Apache, no hay otras dependencias.

HTH …

Todo lo que necesita es tenerlo en un directorio que esté configurado para ejecutar scripts CGI, luego debe agregar

 #!/usr/bin/env python 

en la parte superior, y debe ejecutar la secuencia de comandos como una secuencia de comandos de Python normal si se vincula a ella. (como lo haría con un archivo HTML o PHP)

Esto, por supuesto, asume que su servidor web está configurado para ejecutar CGI, y que tiene un sistema Linux.

Existen otras soluciones alternativas si desea algo más sofisticado, como mod_python y marcos web como Pylons, pero creo que la solución CGI se adaptaría mejor a su caso de uso.

[EDITAR]

En Windows, si tiene Apache, DEBE poder usar el mismo método, pero reemplazando las cosas detrás del #! con la ruta a tu python.exe, así:

 #!C:\Python25\python.exe -u 

Al parecer, se necesita -u para poner Python en modo sin almacenamiento de memoria según este enlace, que también tiene más información en profundidad: http://www.imladris.com/Scripts/PythonForWindows.html

Debería considerar CherryPy como su controlador de solicitudes HTTP que puede configurarse para ejecutarse sobre un servidor web NGINX muy liviano (o Apache, si lo prefiere).

Luego puede importar los otros scripts al servicio que está ejecutando en CherryPy. Esto le daría un poco más de control para monitorear el proceso y detectar errores si ocurren.

La otra opción es simplemente decirle al sistema operativo que active el comando usando os.system (). Consulte aquí un ejemplo de diferentes enfoques para usar os.system ().

Todo lo que necesita para comenzar es un simple script cgi (o conjunto de scripts). Las otras respuestas han cubierto cómo hacer esto para que no lo repita; en cambio, recalcaré que usar texto sin formato te llevará a un largo camino . Simplemente print("Content-type: text/plain\n") el encabezado ( print("Content-type: text/plain\n") más imprimir agrega su propia nueva línea para darle la línea en blanco necesaria) y luego ejecute su progtwig normal.

De esta manera, cualquier salida normal de su script se envía al navegador y no tiene que preocuparse por el HTML, el escape, los marcos, nada. “Haz lo más simple que pueda funcionar”.

Esto es especialmente apropiado para tareas administrativas privadas no interactivas como las que describe, y le permite usar progtwigs idénticos desde un shell con un mínimo de esfuerzo. Su controlador, la página con los botones, puede ser un archivo HTML estático con formularios de un solo botón. O incluso una lista de enlaces.

Para avanzar desde allí, observe el módulo de registro (por ejemplo, envíe mensajes INFO al navegador pero no la línea de comandos, o categorice fácilmente los mensajes usando diferentes registradores, configurando sus manejadores), y luego comience a considerar los motores de plantillas y los marcos. .

No imprima su propio HTML y omita el uso de una de las muchas bibliotecas existentes: ahorrará un montón de dolor de cabeza, incluso gastando un poco de tiempo adicional para aprender la biblioteca. O al menos encapsule su salida escribiendo efectivamente su propio mini motor.

Si conoces tu camino con Apache, debes comenzar.

En una pregunta anterior, pedí una implementación mínima para conectar un sitio web de AJAX a Python . Esto podría lograr lo que buscas. Tiene un botón que activa algún código de Python y luego muestra el resultado en la página. Mi solución utiliza el servidor web incorporado en Python, por lo que es realmente ligero (sin paquetes adicionales o incluso Apache).

Al configurar esto, tenga cuidado de restringir el acceso a los scripts que realizan alguna acción en su servidor web. No es suficiente colocarlos en un directorio donde simplemente no publica la URL, porque tarde o temprano alguien los encontrará.

Como mínimo, coloque estos scripts en una ubicación que esté protegida por contraseña. Usted no quiere que nadie en Internet pueda ejecutar sus scripts.

Si ahora está usando Python 3, imprimir es una función que requiere paréntesis.

 #!/Python34/python print ("Content-type: text/html\n") print ("") print ("") print ("Hello World from Python Script.") print ("")