我们先来看一下效果(简单的写了一个):

原理:将post请求的代码数据写入了服务器的一个文件,然后用服务器的python编译器执行返回结果

实现代码:

#flaskrun.py

# -*- coding: utf-8 -*-

# __author__="ZJL"

from flask import Flask

from flask import request

from flask import Response

import json

import zxby

app = Flask(__name__)

def Response_headers(content):

resp = Response(content)

resp.headers['Access-Control-Allow-Origin'] = '*'

return resp

@app.route('/')

def hello_world():

return Response_headers('hello world!!!')

@app.route('/run', methods=['POST'])

def run():

if request.method == 'POST' and request.form['code']:

code = request.form['code']

print(code)

jsondata = zxby.main(code)

return Response_headers(str(jsondata))

@app.errorhandler(403)

def page_not_found(error):

content = json.dumps({"error_code": "403"})

resp = Response_headers(content)

return resp

@app.errorhandler(404)

def page_not_found(error):

content = json.dumps({"error_code": "404"})

resp = Response_headers(content)

return resp

@app.errorhandler(400)

def page_not_found(error):

content = json.dumps({"error_code": "400"})

resp = Response_headers(content)

return resp

@app.errorhandler(405)

def page_not_found(error):

content = json.dumps({"error_code": "405"})

resp = Response_headers(content)

return resp

@app.errorhandler(410)

def page_not_found(error):

content = json.dumps({"error_code": "410"})

resp = Response_headers(content)

return resp

@app.errorhandler(500)

def page_not_found(error):

content = json.dumps({"error_code": "500"})

resp = Response_headers(content)

return resp

if __name__ == '__main__':

app.run(debug=True)

#zxby.py

# -*- coding: utf-8 -*-

# __author__="ZJL"

import os, sys, subprocess, tempfile, time

# 创建临时文件夹,返回临时文件夹路径

TempFile = tempfile.mkdtemp(suffix='_test', prefix='python_')

# 文件名

FileNum = int(time.time() * 1000)

# python编译器位置

EXEC = sys.executable

# 获取python版本

def get_version():

v = sys.version_info

version = "python %s.%s" % (v.major, v.minor)

return version

# 获得py文件名

def get_pyname():

global FileNum

return 'test_%d' % FileNum

# 接收代码写入文件

def write_file(pyname, code):

fpath = os.path.join(TempFile, '%s.py' % pyname)

with open(fpath, 'w', encoding='utf-8') as f:

f.write(code)

print('file path: %s' % fpath)

return fpath

# 编码

def decode(s):

try:

return s.decode('utf-8')

except UnicodeDecodeError:

return s.decode('gbk')

# 主执行函数

def main(code):

r = dict()

r["version"] = get_version()

pyname = get_pyname()

fpath = write_file(pyname, code)

try:

# subprocess.check_output 是 父进程等待子进程完成,返回子进程向标准输出的输出结果

# stderr是标准输出的类型

outdata = decode(subprocess.check_output([EXEC, fpath], stderr=subprocess.STDOUT, timeout=5))

except subprocess.CalledProcessError as e:

# e.output是错误信息标准输出

# 错误返回的数据

r["code"] = 'Error'

r["output"] = decode(e.output)

return r

else:

# 成功返回的数据

r['output'] = outdata

r["code"] = "Success"

return r

finally:

# 删除文件(其实不用删除临时文件会自动删除)

try:

os.remove(fpath)

except Exception as e:

exit(1)

if __name__ == '__main__':

code = "print(11);print(22)"

print(main(code))

运行app.run()方法,通过post提交代码,就ok了。我们可以对输出结过做进一步的处理,我这只是为了解一下原理,就没继续了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

python在线编译-python在线编译器的简单原理及简单实现代码相关推荐

  1. 【原创】用 Python 反编译 Python 软件

    [原创]用 Python 反编译 Python 软件 标 题: [原创]用 Python 反编译 Python 软件 作 者: Ptero 时 间: 2010-04-21,16:28:27 链 接: ...

  2. python在线编译-在线编译python

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 尝试通过源码自己编译 python,使用的系统是 ubuntu14.04 ...

  3. python在线编辑器编译excel_python在线编译器的简单原理及简单实现代码

    我们先来看一下效果(简单的写了一个): 原理:将post请求的代码数据写入了服务器的一个文件,然后用服务器的python编译器执行返回结果 实现代码: #flaskrun.py # -*- codin ...

  4. 在线python编程编译器-python在线编译器的简单原理及简单实现代码

    我们先来看一下效果(简单的写了一个): 原理:将post请求的代码数据写入了服务器的一个文件,然后用服务器的python编译器执行返回结果 实现代码: #flaskrun.py # -*- codin ...

  5. 在线编译linux,在线就能用的Linux我给你找好了

    原标题:在线就能用的Linux我给你找好了 来源:公众号[编程珠玑] 作者:守望先生 是不是不想装虚拟机,还想体验一下Linux?是不是自己的电脑不在,又想搞事情?今天给大家推荐几个在线就可以玩的Li ...

  6. mysql主从同步简单原理_MYSQL简单主从复制原理及实现

    mysql主从复制原理: Master会对数据库产生修改的语句记录到二进制日志中,在Slave中会有一个线程(IO thread)会向Master请求二进制日志中发生的事件,Master通过binlo ...

  7. Lightly 在线编译

    编译器(compiler)是一种计算机程序,它可以将 C.C++.Java 等高级编程语言写成的源代码转化成汇编语言或机器代码. 现代编译器的主要工作流程如下: 一般的文本编辑器(text edito ...

  8. java在线编译(JAVA编译过程)

    听说有一个Java在线编译网站 你可以上网搜索150 SCJP Questions And Answers关键字. 下面是这个网站,请用斜线代替加号,用点代替句号,前面加上http. it.caree ...

  9. HC595简单原理及proteus仿真(一)草履虫能听懂版

    简单原理 目录 简单原理 简介: 特性 : 引脚功能: proteus仿真 接线: 注意: SH_CP,ST_CP,DS如何工作 实验一: 实验一: 实验三: END: hc595是具有三态输出寄存器 ...

最新文章

  1. 每周一个 Python 模块 | time
  2. 【技术综述】“看透”神经网络
  3. 【2018.5.19】模拟赛之三-ssl2434 取数【搜索,卡常或记忆化搜索】
  4. 第一百三十三期:MySQL锁会不会,你就差看一看咯
  5. RHEL6.3 ftp服务器参数的戏说——不看白不看,看了不白看
  6. vlf 用法_什么是SQL虚拟日志文件(又名SQL Server VLF)?
  7. Harmony OS — Text文本框
  8. javaScript中的变量作用域的闭包处理
  9. ajax谷歌浏览器没缓存,从缓存AJAX请求会导致Chrome(Prevent Chrome from caching AJA
  10. java通达信_通达信公式转换JAVA
  11. Overleaf 指南:30 分钟 LaTeX 入门
  12. 基于JAVA移动端选课系统设计与实现服务器端计算机毕业设计源码+数据库+lw文档+系统+部署
  13. 虚拟机安装后找不到操作系统
  14. 机器学习笔记-阻尼牛顿法
  15. OpenCV情绪识别(Python实现,超简单)
  16. 代码随想录Day04 | LeetCode24. 两两交换链表中的节点、LeetCode19. 删除链表的倒数第N个节点、LeetCode160. 链表相交、LeetCode142. 环形链表Ⅱ
  17. windows开源会有linux吗,微软真的要开源Windows?小伙伴惊呆了!
  18. 免费DataGridView打印及.NET轻松打印控件(VB打印,C#打印)
  19. mysql在哪关防火墙_MySQL的防火墙功能
  20. 讲给后台程序员看的前端系列教程(52)——Bootstrap轮播图

热门文章

  1. zookeeper学习总结
  2. 关于Zookeeper
  3. 程序员技术练级攻略--原作者:陈皓
  4. javaweb项目中的过滤器的使用
  5. php本页面调试报错配置
  6. HDU 5459 Jesus Is Here (递推,组合数学)
  7. decimal.Round 的区别
  8. Python语言编程基础
  9. C语言程序设计:现代方法(第2版)第三章全部习题答案
  10. Python Socket TypeError: a bytes-like object is required, not 'str' 错误提示