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中的exec、eval使用实例
Sep 23 Python
python微信跳一跳系列之自动计算跳一跳距离
Feb 26 Python
python实现隐马尔科夫模型HMM
Mar 25 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
我们为什么要减少Python中循环的使用
Jul 10 Python
Python使用psutil获取进程信息的例子
Dec 17 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
Feb 29 Python
Python如何实现爬取B站视频
May 20 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 Python
python中把元组转换为namedtuple方法
Dec 09 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
基于PyInstaller各参数的含义说明
Mar 04 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
php中将一个对象保存到Session中的方法
2015/03/13 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
在UpdatePanel内jquery easyui效果失效的解决方法
2010/04/11 Javascript
IE6 fixed的完美解决方案
2011/03/31 Javascript
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
如何在 Vue.js 中使用第三方js库
2017/04/25 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
Python+tkinter模拟“记住我”自动登录实例代码
2018/01/16 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
python 基于opencv操作摄像头
2020/12/24 Python
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
工程造价自荐信
2013/10/09 职场文书
自动化专业个人求职信范文
2013/11/29 职场文书
会计实习自我鉴定
2013/12/04 职场文书
运动会广播稿400字
2014/01/25 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
办公用品管理制度
2015/08/04 职场文书