Python在线运行代码助手


Posted in Python onJuly 15, 2016

Python代码运行助手可以让你在线输入Python代码,然后通过本机运行的一个Python脚本来执行代码。原理如下:

在网页输入代码:

Python在线运行代码助手

点击Run按钮,代码被发送到本机正在运行的Python代码运行助手;

Python代码运行助手将代码保存为临时文件,然后调用Python解释器执行代码;

网页显示代码执行结果:

Python在线运行代码助手

下载

点击右键,目标另存为:learning.py

备用下载地址:learning.py

完整代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

r'''
learning.py

A Python 3 tutorial from http://www.liaoxuefeng.com

Usage:

python3 learning.py
'''

import sys

def check_version():
 v = sys.version_info
 if v.major == 3 and v.minor >= 4:
  return True
 print('Your current python is %d.%d. Please use Python 3.4.' % (v.major, v.minor))
 return False

if not check_version():
 exit(1)

import os, io, json, subprocess, tempfile
from urllib import parse
from wsgiref.simple_server import make_server

EXEC = sys.executable
PORT = 39093
HOST = 'local.liaoxuefeng.com:%d' % PORT
TEMP = tempfile.mkdtemp(suffix='_py', prefix='learn_python_')
INDEX = 0

def main():
 httpd = make_server('127.0.0.1', PORT, application)
 print('Ready for Python code on port %d...' % PORT)
 httpd.serve_forever()

def get_name():
 global INDEX
 INDEX = INDEX + 1
 return 'test_%d' % INDEX

def write_py(name, code):
 fpath = os.path.join(TEMP, '%s.py' % name)
 with open(fpath, 'w', encoding='utf-8') as f:
  f.write(code)
 print('Code wrote to: %s' % fpath)
 return fpath

def decode(s):
 try:
  return s.decode('utf-8')
 except UnicodeDecodeError:
  return s.decode('gbk')

def application(environ, start_response):
 host = environ.get('HTTP_HOST')
 method = environ.get('REQUEST_METHOD')
 path = environ.get('PATH_INFO')
 if method == 'GET' and path == '/':
  start_response('200 OK', [('Content-Type', 'text/html')])
  return [b'<html><head><title>Learning Python</title></head><body><form method="post" action="/run"><textarea name="code" style="width:90%;height: 600px"></textarea><p><button type="submit">Run</button></p></form></body></html>']
 if method == 'GET' and path == '/env':
  start_response('200 OK', [('Content-Type', 'text/html')])
  L = [b'<html><head><title>ENV</title></head><body>']
  for k, v in environ.items():
   p = '<p>%s = %s' % (k, str(v))
   L.append(p.encode('utf-8'))
  L.append(b'</html>')
  return L
 if host != HOST or method != 'POST' or path != '/run' or not environ.get('CONTENT_TYPE', '').lower().startswith('application/x-www-form-urlencoded'):
  start_response('400 Bad Request', [('Content-Type', 'application/json')])
  return [b'{"error":"bad_request"}']
 s = environ['wsgi.input'].read(int(environ['CONTENT_LENGTH']))
 qs = parse.parse_qs(s.decode('utf-8'))
 if not 'code' in qs:
  start_response('400 Bad Request', [('Content-Type', 'application/json')])
  return [b'{"error":"invalid_params"}']
 name = qs['name'][0] if 'name' in qs else get_name()
 code = qs['code'][0]
 headers = [('Content-Type', 'application/json')]
 origin = environ.get('HTTP_ORIGIN', '')
 if origin.find('.liaoxuefeng.com') == -1:
  start_response('400 Bad Request', [('Content-Type', 'application/json')])
  return [b'{"error":"invalid_origin"}']
 headers.append(('Access-Control-Allow-Origin', origin))
 start_response('200 OK', headers)
 r = dict()
 try:
  fpath = write_py(name, code)
  print('Execute: %s %s' % (EXEC, fpath))
  r['output'] = decode(subprocess.check_output([EXEC, fpath], stderr=subprocess.STDOUT, timeout=5))
 except subprocess.CalledProcessError as e:
  r = dict(error='Exception', output=decode(e.output))
 except subprocess.TimeoutExpired as e:
  r = dict(error='Timeout', output='执行超时')
 except subprocess.CalledProcessError as e:
  r = dict(error='Error', output='执行错误')
 print('Execute done.')
 return [json.dumps(r).encode('utf-8')]

if __name__ == '__main__':
 main()

运行

在存放learning.py的目录下运行命令:

C:\Users\michael\Downloads> python learning.py

如果看到Ready for Python code on port 39093...表示运行成功,不要关闭命令行窗口,最小化放到后台运行即可:

Python在线运行代码助手

试试效果

需要支持HTML5的浏览器:

IE >= 9
Firefox
Chrome
Sarafi

Python 相关文章推荐
python通过正则查找微博@(at)用户的方法
Mar 13 Python
举例讲解如何在Python编程中进行迭代和遍历
Jan 19 Python
Python OpenCV获取视频的方法
Feb 28 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
浅谈python常用程序算法
Mar 22 Python
python opencv 图像拼接的实现方法
Jun 27 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
基于pytorch中的Sequential用法说明
Jun 24 Python
Python必须了解的35个关键词
Jul 16 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
如何用PyPy让你的Python代码运行得更快
Dec 02 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
Jul 15 #Python
python 性能提升的几种方法
Jul 15 #Python
浅谈Python 对象内存占用
Jul 15 #Python
python发送邮件功能实现代码
Jul 15 #Python
Python中列表和元组的使用方法和区别详解
Dec 30 #Python
Python中的变量和作用域详解
Jul 13 #Python
在Python中通过threading模块定义和调用线程的方法
Jul 12 #Python
You might like
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
js 利用className得到对象的实现代码
2011/11/15 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
微信js-sdk上传与下载图片接口用法示例
2016/10/12 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
jQuery实现手风琴特效
2021/01/11 jQuery
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
详解python中asyncio模块
2018/03/03 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
Python一个简单的通信程序(客户端 服务器)
2019/03/06 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
聊聊python中的异常嵌套
2020/09/01 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
关于职业道德的心得体会
2016/01/18 职场文书
Python异常类型以及处理方法汇总
2021/06/05 Python
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
vue组件vue-esign实现电子签名
2022/04/21 Vue.js