2012-06-29 34 views
8

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

+0

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

+0

Hãy xem xét điều này: http://doc.pypy.org/en/latest/sandbox.html – ChristopheD

+0

Cảm ơn rất nhiều, @ChristopheD. Tôi sẽ đọc qua nó. – twoxmachine

Trả lời

8

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.

+0

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

3

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=?

+0

Đ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

1

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ạnthự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

1

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.

Các vấn đề liên quan