Cómo incrustar un intérprete de Python en un sitio web

Estoy intentando construir un sitio de encoding educativa, similar a Codecademy , pero francamente no sé qué pasos se deben tomar. ¿Podría apuntarme en la dirección correcta para incluir incluso un simple intérprete de python en una aplicación web?

Una opción podría ser usar PyPy para crear un python aislado. Limitaría las operaciones externas que alguien podría hacer.

Una vez que haya configurado esa configuración, su sitio web tomará el código fuente, lo enviará a través de ajax a su servidor web, y el servidor ejecutará el código en un subproceso de una instancia de python de espacio aislado. También podría terminar el proceso si se demorara más de 5 segundos. A continuación, devuelve la salida como respuesta al cliente.

Vea estos enlaces para obtener ayuda en una caja de arena PyPy:
http://doc.pypy.org/en/latest/sandbox.html
http://readevalprint.com/blog/python-sandbox-with-pypy.html

Crear un REPL totalmente interactivo sería aún más complicado. Necesitaría mantener vivo un intérprete para cada cliente en su servidor. Luego acepte las “líneas” de entrada de ajax y ejecútelas a través de la interpreferencia comunicándose con el proceso en ejecución, y devuelva la salida.

En general, no es trivial. Necesitarías algunas habilidades de desarrollo fuertes para hacer esto cómodamente. Puede encontrar esta tarea un poco desalentadora si solo está aprendiendo.

Hay más que hacer aquí de lo que crees.

El principal problema es que no puede permitir que las personas ejecuten código Python arbitrario en su servidor web. Por ejemplo, ¿qué pasa si lo hacen?

import os os.system("rm -rf *.*") 

Claramente tienes que ejecutar este código de Python de forma segura. Pero luego tienes el problema de asegurar Python, que es básicamente imposible debido a lo dynamic que es. Y así probablemente tendrás que ejecutar el shell de Python en una máquina virtual, que viene con sus propios dolores de cabeza.


¿Ha visto, por ejemplo, http://code.google.com/p/google-app-engine-samples/downloads/detail?name=shell_20091112.tar.gz&can=2&q= ?

Una opción reciente para esto es usar repl .

Esta opción es impresionante porque los comstackdores se hacen con JavaScript, por lo que la comstackción y la ejecución se realizan en el lado del usuario , lo que significa que el servidor está libre de vulnerabilidades.

Tienen comstackdores para: Python3, Python, Javascript, Java, Ruby, PHP

Te recomiendo que visites su sitio en http://repl.it

Mira en contenedores LXC. Tienen una api muy buena que puedes usar para crear contenedores livianos para linux. Puede ejecutar los comandos de subproceso dentro de ese contenedor de manera que el usuario final no pueda meterse con su servidor principal.