Pythonコード実行アシスタントは、WebページでPython言語を実行できるツールです。 pythonオペレーティング環境は多くのチュートリアルでDOSを使用しているため、暗いインターフェイスは少し粗雑に見えます。そのため、このpythonコード実行アシスタントはideとしてリリースされています。
実際、アシスタントインターフェイスを実行しているpythonコードは、合格点と見なすことができます。ideを探している場合は、jupyterをお勧めします。 JupyterはANACONDAに統合されており、anacodaがインストールされている限り使用できます。
1、 この実行中のアシスタントを開くには、最初にlearning.pyをダウンロードします。見つからない場合は、次のコードをコピーして「learning.py」として保存します。エディターとしてsublimeまたはnotepad ++を使用します。
#! /usr/bin/envpython3
#- *- coding:utf-8-*-
r'''
learning.py
APython3tutorialfromhttp://www.liaoxuefeng.com
Usage:
python3learning.py
'''
importsys
defcheck_version():
v=sys.version_info
ifv.major==3andv.minor =4:
returnTrue
print('Yourcurrentpythonis%d.%d.PleaseusePython3.4.'%(v.major,v.minor))
returnFalse
ifnotcheck_version():exit(1)
importos,io,json,subprocess,tempfile
fromurllibimportparse
fromwsgiref.simple_serverimportmake_server
EXEC=sys.executable
PORT=39093
HOST='local.liaoxuefeng.com:%d'%PORT
TEMP=tempfile.mkdtemp(suffix='_py',prefix='learn_python_')
INDEX=0defmain():
httpd=make_server('127.0.0.1',PORT,application)print('ReadyforPythoncodeonport%d...'%PORT)
httpd.serve_forever()defget_name():
globalINDEX
INDEX=INDEX+1return'test_%d'%INDEX
defwrite_py(name,code):
fpath=os.path.join(TEMP,'%s.py'%name)withopen(fpath,'w',encoding='utf-8')asf:
f.write(code)print('Codewroteto:%s'%fpath)
returnfpath
defdecode(s):try:
returns.decode('utf-8')
exceptUnicodeDecodeError:
returns.decode('gbk')defapplication(environ,start_response):
host=environ.get('HTTP_HOST')
method=environ.get('REQUEST_METHOD')
path=environ.get('PATH_INFO')
ifmethod=='GET'andpath=='/':start_response('200OK',[('Content-Type','text/html')])return[b'<html <head <title LearningPython</title </head <body <formmethod="post"action="/run"<textareaname="code"style="width:90%;height:600px"</textarea <p <buttontype="submit" Run</button
< /p </form </body </html ']
ifmethod=='GET'andpath=='/env':start_response('200OK',[('Content-Type','text/html')])
L=[b'<html <head <title ENV</title </head <body ']
fork,vinenviron.items():
p='<p %s=%s'%(k,str(v))
L.append(p.encode('utf-8'))
L.append(b'</html ')
returnL
ifhost!=HOSTormethod!='POST'orpath!='/run'ornotenviron.get('CONTENT_TYPE','').lower().startswith('application/x-www-form-urlencoded'):start_response('400BadRequest',[('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'))
ifnot'code'inqs:start_response('400BadRequest',[('Content-Type','application/json')])return[b'{"error":"invalid_params"}']
name=qs['name'][0]if'name'inqselseget_name()
code=qs['code'][0]
headers=[('Content-Type','application/json')]
origin=environ.get('HTTP_ORIGIN','')
iforigin.find('.liaoxuefeng.com')==-1:start_response('400BadRequest',[('Content-Type','application/json')])return[b'{"error":"invalid_origin"}']
headers.append(('Access-Control-Allow-Origin',origin))start_response('200OK',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))
exceptsubprocess.CalledProcessErrorase:
r=dict(error='Exception',output=decode(e.output))
exceptsubprocess.TimeoutExpiredase:
r=dict(error='Timeout',output='実行タイムアウト')
exceptsubprocess.CalledProcessErrorase:
r=dict(error='Error',output='実行エラー')print('Executedone.')return[json.dumps(r).encode('utf-8')]
if__name__=='__main__':main()
2、 メモ帳を使用して、次のコードを記述します。
@ echooff
pythonlearning.py
pause
「Run.bat」として保存
3、 「Run.bat」と「learning.py」を同じディレクトリに配置します。
4、 ダブルクリックして「Run.bat」を実行すると、黒いdosウィンドウがポップアップします。このウィンドウを閉じないでください。
5、 URLに対応するURLとポートを入力すると、プロセス全体が完了します。
ナレッジポイントの拡張:
Pythonオンラインコードアシスタント
#! /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 +1return'test_%d'% INDEX
def write_py(name,code):
fpath = os.path.join(TEMP,'%s.py'% name)withopen(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','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','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','application/json')])return[b'{"error":"invalid_params"}']
name = qs['name'][0]if'name'in qs elseget_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','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()
これまで、Python用のコード実行アシスタントの使用方法に関するこの記事を紹介しました。関連するPythonコード実行アシスタントの使用コンテンツについては、ZaLou.Cnの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後、ZaLouをさらにサポートしていただければ幸いです。 Cn!
Recommended Posts