一個有趣的Python案例:如何用Python寫出Python的解釋器盼铁?

前幾天粗蔚,一個朋友提出了一個建議,如何用python寫出python的解釋器饶火,我感覺這是一個很好的問題鹏控,于是就去看看,打算用python寫一個試試肤寝,后來我發(fā)現(xiàn)一個事情当辐,python里面的subprocess算是一個很有趣的東西,他可以解釋python自己的代碼鲤看,之后就有個想法了瀑构,嘗試用subprocess去寫一個在線運行python的網(wǎng)站。

私信回復(fù)【PDF】可獲取python電子書一套

那今天我們就來分享一下刨摩,如何使用python去寫一個在線python吧!

首先世吨,這個東西是結(jié)合python的flask框架來完成的澡刹。先介紹一下flask框架:

Flask也被稱為 “microframework” ,因為它使用簡單的核心耘婚,用 extension 增加其他功能罢浇。Flask沒有默認使用的數(shù)據(jù)庫、窗體驗證工具沐祷。然而嚷闭,F(xiàn)lask保留了擴增的彈性,可以用Flask-extension加入這些功能:ORM赖临、窗體驗證工具胞锰、文件上傳、各種開放式身份驗證技術(shù)兢榨。

使用終端嗅榕,運行命令提示符CMD顺饮,執(zhí)行:

pip install Flask

在做我們的工作之前先來了解一下flask框架是怎樣的一個運行機制吧:

首先創(chuàng)建一個flaskrun.py文件(先寫個demo,后面在這個基礎(chǔ)上改改凌那,就可以作為網(wǎng)站后端的接口了)

一個有趣的Python案例:如何用Python寫出Python的解釋器兼雄?

每個函數(shù)的上面都有修飾器,這個就代表他的路由帽蝶,比如說@app.route('/'),它就指定了赦肋,下面這個函數(shù)所在的地址是127.0.0.1:5000/(默認端口是5000,可以手動在run方法中修改)

這個文件運行首先我們在沒設(shè)置app文件的情況下励稳,需要先設(shè)置一下佃乘,并且開成調(diào)試模式,再去運行:

一個有趣的Python案例:如何用Python寫出Python的解釋器麦锯?

run了之后恕稠,服務(wù)會起了,就會跳出這樣的界面扶欣。

一個有趣的Python案例:如何用Python寫出Python的解釋器鹅巍?

那我們現(xiàn)在就可以去訪問路由了,現(xiàn)在我們想訪問index方法料祠,我們就輸入路由:

一個有趣的Python案例:如何用Python寫出Python的解釋器骆捧?

如果我們想訪問hello方法,這個時候我們就需要加上/hello的路由了:

一個有趣的Python案例:如何用Python寫出Python的解釋器髓绽?

這樣我們就進入了/hello的方法了敛苇,每個方法對應(yīng)一個路由,包含最后一個post也是一樣:

一個有趣的Python案例:如何用Python寫出Python的解釋器顺呕?

下面我們還要介紹的是報錯機制:

在路由或者訪問數(shù)據(jù)不對的情況下枫攀,我們一般得不到正確的結(jié)果,這個時候我們就需要來看看flask對于錯誤是如何進行解釋的了株茶。

flask對于錯誤也有個修飾器来涨,叫@app.errorhandler() ,括號里面跟錯誤代碼启盛,例如蹦掐,無法找到頁面就可以這么寫:@app.errorhandler(404)

一個有趣的Python案例:如何用Python寫出Python的解釋器?

當然還有一些其他的錯誤僵闯,例如400卧抗,500,405等錯誤鳖粟,我們都可以捕捉:

一個有趣的Python案例:如何用Python寫出Python的解釋器社裆?

ok,flask介紹完畢牺弹,我們下面進入正軌了浦马,用subprocess來寫python了时呀。創(chuàng)建一個文件叫:pyol.py

首先導(dǎo)入要用的包:

import os,sys,subprocess,tempfile,time (敲代碼的時候建議大家還是分開敲,連起來寫雖然也支持晶默,但是事實上是不規(guī)范的谨娜,建議分開寫)

在這里我們還需要用到臨時文件夾,這個文件夾我們在運行python的時候會用到磺陡。

一個有趣的Python案例:如何用Python寫出Python的解釋器趴梢?

下面一點比較關(guān)鍵的是,我們需要用到sys模塊里的executable方法來獲取python編譯器的位置(就是它币他,才能解讀python代碼)

EXEC=sys.executable

下面我們需要定義編碼方式:

一個有趣的Python案例:如何用Python寫出Python的解釋器坞靶?

在默認情況下都是以utf-8的情況下進行編碼。

下面我們需要將用戶寫進來的python代碼寫入文件:

一個有趣的Python案例:如何用Python寫出Python的解釋器蝴悉?

下面我們需要在在一個主函數(shù)中定義執(zhí)行方法彰阴,我們此時就需要用到subprocess 的check_output方法返回子進程的輸出結(jié)果(check_output 是 父進程等待子進程完成,返回子進程向標準輸出的輸出結(jié)果 )

一個有趣的Python案例:如何用Python寫出Python的解釋器拍冠?

將返回結(jié)果輸出:

r['output'] = outdata

最后退出程序并刪除文件:

一個有趣的Python案例:如何用Python寫出Python的解釋器尿这?

但是實際上這個臨時文件本身也會自動刪除,這步其實也算是多余的庆杜。這樣我們的python就寫好了射众。下面只需要把它加入路由,把用戶輸入的數(shù)據(jù)以post的方式提交即可晃财。

我們在flaskrun.py文件里導(dǎo)入以下模塊:

一個有趣的Python案例:如何用Python寫出Python的解釋器叨橱?

我們需要定義一個返回的頭部:

一個有趣的Python案例:如何用Python寫出Python的解釋器?

之后我們來寫post請求的接口:

一個有趣的Python案例:如何用Python寫出Python的解釋器断盛?

我們指定他的路由為/run罗洗,采用post的方式傳遞數(shù)據(jù),調(diào)用剛剛寫的主函數(shù)的執(zhí)行代碼钢猛,來執(zhí)行用戶傳入的code栖博,最后將執(zhí)行結(jié)果返回給用戶。

最后我們運行代碼:

一個有趣的Python案例:如何用Python寫出Python的解釋器厢洞?

最后完整加上優(yōu)化后代碼如下:

pyol.py

一個有趣的Python案例:如何用Python寫出Python的解釋器?

flaskrun.py

一個有趣的Python案例:如何用Python寫出Python的解釋器典奉?

我們現(xiàn)在需要借助postman來看一下run的結(jié)果躺翻,首先我們先run一下代碼

(flask run):

一個有趣的Python案例:如何用Python寫出Python的解釋器?

之后我們打開postman

一個有趣的Python案例:如何用Python寫出Python的解釋器卫玖?

瞬間就完成了公你。

之后我們只要寫個前端,把這個接口給前端調(diào)就大功告成了假瞬!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末陕靠,一起剝皮案震驚了整個濱河市迂尝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剪芥,老刑警劉巖垄开,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異税肪,居然都是意外死亡溉躲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門益兄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锻梳,“玉大人绎狭,你說我怎么就攤上這事饰躲‰惹眩” “怎么了闹击?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵窜骄,是天一觀的道長费奸。 經(jīng)常有香客問我召耘,道長仑性,這世上最難降的妖魔是什么古今? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任屁魏,我火速辦了婚禮,結(jié)果婚禮上捉腥,老公的妹妹穿的比我還像新娘氓拼。我一直安慰自己,他們只是感情好抵碟,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布桃漾。 她就那樣靜靜地躺著,像睡著了一般拟逮。 火紅的嫁衣襯著肌膚如雪撬统。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天敦迄,我揣著相機與錄音恋追,去河邊找鬼。 笑死罚屋,一個胖子當著我的面吹牛苦囱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脾猛,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼撕彤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了猛拴?” 一聲冷哼從身側(cè)響起羹铅,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蚀狰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后职员,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體麻蹋,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年廉邑,在試婚紗的時候發(fā)現(xiàn)自己被綠了哥蔚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛛蒙,死狀恐怖糙箍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情牵祟,我是刑警寧澤深夯,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站诺苹,受9級特大地震影響咕晋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜收奔,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一掌呜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坪哄,春花似錦质蕉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至念祭,卻和暖如春兑宇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粱坤。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工隶糕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人站玄。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓若厚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蜒什。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容