Tôi đang cố gắng xây dựng một trang web giáo dục mã hóa, tương tự như Codecademy, nhưng tôi thẳng thắn thua lỗ về những bước cần thực hiện. Tôi có thể được chỉ đúng hướng trong bao gồm cả một trình thông dịch trăn đơn giản trong một webapp?Làm thế nào để nhúng một thông dịch viên Python trên một trang web
Trả lời
Một tùy chọn có thể là sử dụng PyPy để tạo một python sandboxed. Nó sẽ hạn chế các hoạt động bên ngoài mà ai đó có thể làm.
Khi bạn đã thiết lập xong, trang web của bạn sẽ lấy nguồn mã, gửi nó qua ajax tới máy chủ web của bạn và máy chủ sẽ chạy mã trong một tiến trình con của một cá thể sandbox được sandbox. Bạn cũng có thể giết quá trình nếu mất nhiều thời gian hơn 5 giây. Sau đó, bạn trả lại kết quả đầu ra như là một phản hồi cho máy khách.
Xem những liên kết này để được giúp đỡ về một sandbox PyPy:
http://doc.pypy.org/en/latest/sandbox.html
http://readevalprint.com/blog/python-sandbox-with-pypy.html
Để tạo một REPL tương tác đầy đủ sẽ càng tham gia nhiều hơn. Bạn sẽ cần phải giữ một thông dịch viên còn sống cho mỗi khách hàng trên máy chủ của bạn. Sau đó, chấp nhận ajax "dòng" của đầu vào và chạy chúng thông qua các interp bằng cách giao tiếp với quá trình chạy, và trả về đầu ra.
Nhìn chung, không tầm thường. Bạn sẽ cần một số kỹ năng dev mạnh để làm điều này một cách thoải mái. Bạn có thể thấy nhiệm vụ này hơi khó khăn nếu bạn chỉ học.
Cảm ơn bạn đã phác thảo các bước mà tôi sẽ phải thực hiện. Tôi nghĩ rằng một dự án như thế này có thể khó khăn. Tôi rất biết ơn vì bạn đã dành thời gian để chỉ cho tôi những sợi dây thừng! – twoxmachine
Có nhiều việc phải làm ở đây hơn bạn nghĩ.
Vấn đề chính là bạn không thể cho phép mọi người chạy mã Python tùy ý trên máy chủ web của bạn. Ví dụ: điều gì sẽ xảy ra nếu họ làm
import os
os.system("rm -rf *.*")
Vì vậy, rõ ràng bạn phải chạy mã Python này một cách an toàn. Nhưng sau đó bạn có vấn đề về bảo mật Python, điều cơ bản là không thể vì nó năng động như thế nào. Và vì vậy bạn có thể sẽ phải chạy vỏ Python trong một máy ảo, mà đi kèm với những cơn đau đầu của chính nó.
Bạn đã xem ví dụ: http://code.google.com/p/google-app-engine-samples/downloads/detail?name=shell_20091112.tar.gz&can=2&q=?
Đi qua một số tìm kiếm, tôi đã biết một số vấn đề bảo mật liên quan đến việc cho phép mã tùy ý. Cảm ơn bạn đã cho tôi xem một ví dụ thực tế, nó đã làm rõ một chút cho tôi! Tôi sẽ xem qua trình bao AJAX mà bạn đã liên kết để tìm hiểu cách nó được triển khai. Tôi đánh giá cao việc bạn thể hiện điều đó với tôi. – twoxmachine
Một tùy chọn gần đây cho việc này là sử dụng repl.
Tùy chọn này là tuyệt vời bởi vì trình biên dịch được thực hiện sử dụng JavaScript nên biên soạn và thực hiện được thực hiện trong sử dụng bên, có nghĩa là máy chủ hoàn toàn miễn lỗ hổng.
Họ có trình biên dịch cho: Python3, Python, Javascript, Java, Ruby, PHP ...
tôi khuyên bạn kiểm tra trang web của họ tại http://repl.it
Nhìn vào LXC Containers. Họ có một api khá thú vị mà bạn có thể sử dụng để tạo các thùng chứa linux nhẹ. Bạn có thể chạy các lệnh subprocess bên trong thùng chứa đó theo cách mà người dùng cuối không thể gây rối với máy chủ chính của bạn.
- 1. Làm thế nào để viết một thông dịch viên?
- 2. Làm thế nào để nhúng một thông dịch viên lisp phổ biến vào một ứng dụng gui
- 3. Làm thế nào để bạn nhúng tweet mới nhất trên một trang web?
- 4. Dịch vụ nào nhúng videoch dễ dàng trên một trang web?
- 5. Làm thế nào để triển khai một trang web WordPress và trang web Django trên cùng một tên miền?
- 6. Scala: làm thế nào để nhúng một máy chủ web nhỏ vào một ứng dụng scala?
- 7. Nhúng trình xem Powerpoint trên một trang web (PHP)
- 8. Làm thế nào để trích xuất một số phần của một trang web bằng Python
- 9. Làm thế nào để viết một thông số cho một trang web
- 10. Hiển thị một cá thể lớp C++ tới một trình thông dịch nhúng python
- 11. làm thế nào để nhúng một thiết bị đầu cuối bash linux bên trong ruby trên trang web đường ray?
- 12. Làm thế nào để gọi một thông dịch viên elisp tương tác trong Emacs?
- 13. Làm cách nào để nhúng âm thanh vào trang web?
- 14. Làm thế nào để tìm tất cả các liên kết/trang trên một trang web
- 15. Làm thế nào để kéo dài một tiêu đề trên một nền trang web với CSS
- 16. Làm thế nào để bấm vào một nút trên một trang web ASP.NET lập trình?
- 17. Nhúng mô hình 3D trên trang web
- 18. Cách nhúng tệp mjpeg trên trang web
- 19. Làm thế nào để liên tục hiển thị đầu ra Python trong một trang web?
- 20. Làm cách nào để biên dịch một trang web ASP.NET thành một tệp DLL?
- 21. Làm cách nào để nhúng một trang web được đổi kích thước qua một khung nội tuyến?
- 22. Làm thế nào để nhúng một UITableView trong một UIScrollView
- 23. Làm cách nào để khởi động lại trình thông dịch Python được nhúng?
- 24. Làm thế nào để đặt siêu liên kết đến một trang web trên ứng dụng Android?
- 25. Làm cách nào để gửi thông tin tới một dịch vụ web bằng C# bằng .NET?
- 26. Làm thế nào: Ruby on Rails để xây dựng một trang web cơ bản
- 27. Làm thế nào để có được một trang web tổng kích thước trở lại/băng thông sử dụng để gọi một trang web
- 28. Làm cách nào để nhúng Outlook Web App vào trang web của tôi?
- 29. Làm thế nào để MSDeploy một gói trang web được xây dựng đến một trang web trinh nữ IIS
- 30. Làm cách nào để lấy URL cho Google Map được nhúng trên trang web của tôi?
Tôi không phải là người có nhiều kinh nghiệm nhất với các công cụ phát triển web. Tôi hy vọng tìm hiểu càng nhiều càng tốt từ một dự án với một mục tiêu đầy tham vọng! – twoxmachine
Hãy xem xét điều này: http://doc.pypy.org/en/latest/sandbox.html – ChristopheD
Cảm ơn rất nhiều, @ChristopheD. Tôi sẽ đọc qua nó. – twoxmachine