python语言在线编译器,python编译器使用教程
今天没事儿完了一下菜鸟教程的大蟒编译器发现挺有意思,想搞明白它的原理是啥,于是我输入了以下代码:
导入操作系统打印(系统。版本信息)打印(系统。可执行)打印(系统。路径[0])打印(操作系统。listdir(sys。path[0]),并打开(/usercode/file)。py )作为e:print(e . read())结果是这样的:
我个人推测,它是将邮政请求的代码数据写入了服务器的一个文件,然后用服务器的大蟒编译器执行返回结果
于是我自己简单实现一个
目录结构:
在线执行
- zxby.py
-应用程序
- flaskrun.py
zxby.py代码实现:
# -*-编码:utf-8 -*-#__author__=ZJL 导入操作系统,系统,子进程,临时文件,时间#创建临时文件夹,返回临时文件夹路径TempFile=tempfile.mkdtemp(后缀=_test ,前缀=python_)#文件名FileNum=int(time。time()* 1000)# python编译器位置EXEC=sys.executable#获取大蟒版本def get _ version():v=sys。version _ info version= python % s . % s %(主要版本,次要版本)返回版本#获得巴拉圭文件名def get_pyname():全局FileNum返回测试_ % d“% FileNum #接收代码写入文件def write_file(pyname,code):fpath=OS。路径。join(TempFile, % s . py % pyname )与open(fpath, w ,encoding= utf-8 )as f:f . write(code)print(文件路径:% s“% fpath”)返回fpath#编码def decode:try:return s . decode( utf-8 )除unicode解码错误:return s . decode( gbk )#主执行函数def main(code):r=dict()r[ version ]=get _ version()pyname=get _ pyname()fpath=write _ file(pyname,code)try:# subprocess。检查_输出是父进程等待子进程完成,返回子进程向标准输出的输出结果# stderr是标准输出的类型输出数据=解码(子过程。check _ output([EXEC,fpath),stderr=子进程.STDOUT,timeout=5))子进程除外。调用了过程误差作为e: # e .输出是错误信息标准输出# 错误返回的数据r[ code ]= Error r[ output ]=decode(e . output)return r else:#成功返回的数据r[输出]=输出数据r[代码]=成功最后返回r:#删除文件(其实不用删除临时文件会自动删除)试试:OS。将(fpath)异常删除为e:exit(1)# if _ _ name _ _= _ _ main _ _ :# code= print(你好)“”“#打印(主(代码))
flaskrun.py代码实现:# -*-编码:utf-8-*-# _ _ author _ _= ZJL from Flask import Flask import request from Flask import Response import JSON import zxbyapp=Flask(_ _ name _ _)def Response _ headers(content):resp=Response(content)resp。headers[ Access-Control-Allow-Origin ]= * 返回resp @ app。route(/)def hello _ world():return Response _ headers( hello world!)@app.route(/run ,methods=[ POST ])def run():if request。方法== POST 和请求。格式[ code ]:code=request。form[ code ]print(code)JSON data=zxby。main(code)返回Response _ headers(str(JSON data))@ app。错误处理程序(403)def page _ not _ found(错误):content=JSON。转储({ 错误代码: 403 })resp=Response _ headers(内容)返回
打开邮递员测试:
正确的代码测试:
错误代码测试:
大致就是这样。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。