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笔记(2)
Oct 24 Python
浅谈MySQL中的触发器
May 05 Python
Python检查和同步本地时间(北京时间)的实现方法
Dec 03 Python
python实现转圈打印矩阵
Mar 02 Python
Python实现去除图片中指定颜色的像素功能示例
Apr 13 Python
opencv转换颜色空间更改图片背景
Aug 20 Python
flask框架json数据的拿取和返回操作示例
Nov 28 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
Python yield生成器和return对比代码实例
Apr 20 Python
keras自动编码器实现系列之卷积自动编码器操作
Jul 03 Python
基于Python的EasyGUI学习实践
May 07 Python
Python如何解决secure_filename对中文不支持问题
Jul 16 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
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
关于JavaScript的一些看法
2009/05/27 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
2010/09/28 Javascript
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
javascript 闭包详解
2015/07/02 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
JavaScript 字符串常用操作小结(非常实用)
2016/11/30 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
2017/01/06 Javascript
vue-axios使用详解
2017/05/10 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
python使用pil生成缩略图的方法
2015/03/26 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
pandas 将索引值相加的方法
2018/11/15 Python
详解Python字典的操作
2019/03/04 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
核心价值观演讲稿
2014/05/13 职场文书
入党现实表现材料
2014/12/23 职场文书
培训班通知
2015/04/25 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
python​格式化字符串
2022/04/20 Python