2012-06-29 34 views
8

我正在嘗試構建一個類似於Codecademy的教育編碼網站,但坦率地說我不知道​​應該採取哪些步驟。我能指出正確的方向,甚至包括一個簡單的python解釋器在webapp?如何在網站上嵌入Python解釋器

+0

我不是最有經驗的網頁開發工具。我希望儘可能多地從一個有着雄心勃勃的目標的項目中學習! – twoxmachine

+0

看看這個:http://doc.pypy.org/en/latest/sandbox.html – ChristopheD

+0

非常感謝@ChristopheD。我會通讀它。 – twoxmachine

回答

8

一個選項可能是使用PyPy創建一個沙盒python。這會限制某人可以做的外部操作。

一旦你完成了設置,你的網站將獲取代碼源,通過ajax發送給你的網絡服務器,服務器將運行在沙箱python實例的子進程中的代碼。如果花費比5秒更長的時間,你也可以殺死進程。然後,您將輸出作爲對客戶端的響應返回。

請參閱在PyPy沙箱相關鏈接尋求幫助:
http://doc.pypy.org/en/latest/sandbox.html
http://readevalprint.com/blog/python-sandbox-with-pypy.html

要創建一個完全交互式的REPL甚至會更多地參與。您需要爲您的服務器上的每個客戶端保留一位解釋器。然後接受輸入的ajax「行」,並通過與正在運行的進程進行通信來運行它們,並返回輸出。

整體而言,不是微不足道的。你需要一些強大的開發技能來做到這一點舒適。如果你只是在學習,你可能會發現這項任務有點令人生畏。

+0

感謝您列出我必須採取的步驟。我認爲這樣的項目可能會很艱難。我很感激你花時間向我展示了繩索! – twoxmachine

3

這裏還有比您想象的更多的事情。

主要問題是你不能讓人們在你的web服務器上運行任意Python代碼。例如,如果他們這樣做會發生什麼

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

很顯然,您必須安全地運行此Python代碼。但是,然後你有保護Python的問題,這基本上是不可能的,因爲它是多麼動態。所以你可能不得不在虛擬機中運行Python shell,這會帶來一些麻煩。


你見過http://code.google.com/p/google-app-engine-samples/downloads/detail?name=shell_20091112.tar.gz&can=2&q=

+0

通過一些搜索,我意識到一些涉及允許任意代碼的安全問題。謝謝你給我展示了一個實際的例子,它爲我澄清了很多! 我將討論您鏈接的AJAX shell,試圖弄清楚它是如何實現的。我很感激你向我展示它。 – twoxmachine

1

最近的一種選擇是使用repl。因爲編譯器使用JavaScript的所以編譯執行用戶側製成,這意味着服務器是免費的漏洞做出

此選項是真棒。

他們有編譯器:Python3,Python和Java腳本,Java和Ruby的,PHP ...

我強烈建議你在http://repl.it

1

查找到LXC集裝箱檢查他們的網站。他們有一個非常酷的API,可以用來創建輕量級的Linux容器。您可以在該容器內運行子進程命令,這樣最終用戶就不會混淆主服務器。