說一下大概的思路:python
1.目標:在輸入框輸入Python3代碼,點擊運行,右邊顯示代碼結果。服務器
2.步驟:ide
那首先咱們須要一個頁面來顯示咱們的輸入輸出,還有一個按鈕;spa
而後就是經過點擊按鈕事件獲取輸入的內容;(用到了Ajax與服務器交互;它會自動封裝請求行,請求頭,空格,咱們只須要把內容send就能夠了)事件
再就是發生內容到服務器;it
服務器接收內容;class
服務器處理內容;(用正則獲得咱們的代碼塊寫入新的文件命名爲.py的文件,test
而後用subprocess模塊下的方法去獲取新文件執行後的結果)rsa
服務器返回結果,包括:響應行、響應頭、空格、響應體(代碼執行結果);請求
最後就是頁面接收到返回結果,並顯示到輸出框。
3.遇到的問題:主要就是在處理服務器接收頁面發送過來的數據,用正則拆分,這塊坑比較多。
貼一下利用subprocess的實現吧:
obj = subprocess.Popen(["python3"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,universal_newlines=True)
f = open("test.py", "r")
content = f.read()
out_error_list = obj.communicate(content)
#返回結果是一個元組,元組的[0]是程序的返回結果,[1]是執行代碼的錯誤信息提示。
print(out_error_list)
if not out_error_list[0]:
result = "請檢查輸入的代碼正確性,謝謝!"+ out_error_list[1]
else:
result = out_error_list[0]