Estoy intentando crear un sitio de codificación educativo, similar al Codecademy, pero francamente no sé qué pasos debo seguir. ¿Podría señalarme en la dirección correcta al incluir incluso un simple intérprete de Python en una aplicación web?Cómo incrustar un intérprete de Python en un sitio web
Respuesta
Una opción podría ser usar PyPy para crear un pitón de espacio aislado. Limitaría las operaciones externas que alguien podría hacer.
Una vez que tenga esa configuración, su sitio web tomará el código fuente, lo enviará a ajax a su servidor web, y el servidor ejecutará el código en un subproceso de una instancia de sandboxed python. También podría matar el proceso si tardara más de 5 segundos. Luego devuelve la salida como respuesta al cliente.
Consulte 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
Para crear un REPL totalmente interactivo sería aún más complicado. Debería mantener vivo un intérprete para cada cliente en su servidor. A continuación, acepte ajax "líneas" de entrada y ejecútelas a través de la interpo comunicándose con el proceso en ejecución, y devuelva la salida.
En general, no es trivial. Necesitarás algunas habilidades fuertes de desarrollo para hacer esto cómodamente. Puede encontrar esta tarea un poco intimidante si solo está aprendiendo.
Gracias por esbozar los pasos que tendré que tomar. Pensé que un proyecto como este podría ser difícil. ¡Estoy agradecido de que hayas tomado el tiempo para mostrarme las cuerdas! – twoxmachine
Aquí hay más para hacer de lo que cree.
El principal problema es que usted no puede permitir que las personas ejecuten código Python arbitrario en su servidor web. Por ejemplo, qué sucede si lo hacen
import os
os.system("rm -rf *.*")
Así que claramente tiene que ejecutar este código de Python de forma segura. Pero luego tiene el problema de asegurar Python, que es básicamente imposible debido a lo dinámico que es. Y entonces probablemente deba ejecutar el shell de Python en una máquina virtual, que viene con sus propios dolores de cabeza.
¿Has visto p. http://code.google.com/p/google-app-engine-samples/downloads/detail?name=shell_20091112.tar.gz&can=2&q=?
Pasando por algunas búsquedas, estaba al tanto de algunos de los problemas de seguridad involucrados al permitir código arbitrario. Gracias por mostrarme un ejemplo real, ¡me aclaro un poco! Revisaré el shell AJAX que ha vinculado para tratar de descubrir cómo se implementó. Te agradezco que me lo hayas mostrado. – twoxmachine
Una opción reciente para esto es usar repl.
Esta opción es impresionante porque los compiladores se hacen usando JavaScript por lo que la compilación y ejecución se hace en el usuario del lado, lo que significa que el servidor está libre de vulnerabilidades.
Ellos tienen compiladores para: python3, Python, Javascript, Java, Ruby, PHP ...
os recomiendo que compruebe su sitio en http://repl.it
Mira en LXC Contenedores. Tienen una API muy buena que puedes usar para crear contenedores ligeros de linux. Podría ejecutar los comandos del subproceso dentro de ese contenedor para que el usuario final no pueda meterse con su servidor principal.
- 1. Incrustar un sitio web/página en Silverlight
- 2. ¿Cómo incrustar audio dentro de un sitio web?
- 3. Incrustar el intérprete de python en una aplicación de Python
- 4. Cómo incrustar un intérprete de Python en un widget de PyQT
- 5. Cómo incrustar el intérprete Perl en un programa C#
- 6. Incrustar modelos 3D en el sitio web
- 7. Incrustar un intérprete de Ruby en una aplicación de C++
- 8. Escribiendo un sitio web en Python
- 9. ¿Cómo incrustar un sitio web redimensionado a través de un iframe?
- 10. ¿Cómo reiniciar un intérprete de Python incorporado?
- 11. ¿Cómo puedo iniciar sesión en un sitio web usando Python?
- 12. ¿Cómo puedo iniciar sesión en un sitio web con Python?
- 13. Cómo incrustar un intérprete de lisp común en una aplicación de interfaz gráfica de usuario
- 14. Reiniciar un intérprete de Python silenciosamente
- 15. ¿Cómo alojar un sitio web JSP en un servidor web?
- 16. ¿Qué servicio para incrustar un videochat fácilmente en un sitio web?
- 17. Cómo ejecutar MSDeploy un paquete de sitio web creado en un sitio web de IIS virgen
- 18. Medición en un sitio web
- 19. ¿Cómo crear un sitio web simple con python?
- 20. ¿Cómo construir un sitio web en Node.js?
- 21. ¿Incrustar la cámara IP en el sitio web con PHP?
- 22. Raspe un sitio web dinámico
- 23. ¿Cómo funciona el intérprete de Udacity web Python?
- 24. ¿Cómo ejecuto un intérprete de Python en Emacs?
- 25. Sitio web de Python Console
- 26. ¿Cómo supera un servidor web python GIL
- 27. ¿Cómo despliega un sitio web en sus servidores web?
- 28. ¿Cómo escribir un intérprete?
- 29. ¿Cómo incrustar recursos en un solo ejecutable?
- 30. Inicie sesión en un sitio web a través de la herramienta de raspado web en Python
No soy el más experimentado en herramientas de desarrollo web. ¡Espero aprender todo lo que pueda de un proyecto con un objetivo ambicioso! – twoxmachine
Eche un vistazo a esto: http://doc.pypy.org/en/latest/sandbox.html – ChristopheD
Muchas gracias, @ChristopheD. Lo leeré. – twoxmachine