① python浠g爜榪愯屽姪鎵嬫庝箞鎵撳紑
python浠g爜榪愯屽姪鎵嬫槸鑳藉湪緗戦〉涓婅繍琛宲ython璇璦鐨勫伐鍏楓傚洜涓簆ython鐨勮繍琛岀幆澧冨湪寰堝氭暀紼嬮噷閮芥槸鐢╠os鐨勶紝榛戜箮涔庣殑鐣岄潰鐪嬬殑鏈夌偣綆闄嬶紝鎵浠ュ嚭浜嗚繖python浠g爜榪愯屽姪鎵嬶紝浣滀負ide銆
瀹為檯涓婏紝python浠g爜榪愯屽姪鎵嬬晫闈㈠彧鑳界畻鍙婃牸鍒嗭紝濡傛灉瑕佹壘ide錛屾帹鑽愪嬌鐢╦upyter銆俲upyter琚闆嗘垚鍒癆NACONDA閲岋紝鍙瑕佸畨瑁呬簡anacoda灝辮兘浣跨敤浜嗐
鍥炲埌榪欎釜闂棰橈細
1銆佽佹墦寮榪欒繍琛屽姪鎵嬮栧厛瑕佷笅杞戒竴涓猯earning.py錛屽傛灉鎵句笉鍒板彲浠ュ嶅埗濡備笅浠g爜鍙﹀瓨涓衡渓earning.py鈥,緙栬緫鍣ㄧ敤sublime銆佹垨鑰卬otepad++銆
#!/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=0
defmain():
httpd=make_server('127.0.0.1',PORT,application)
print('ReadyforPythoncodeonport%d...'%PORT)
httpd.serve_forever()
defget_name():
globalINDEX
INDEX=INDEX+1
return'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.mps(r).encode('utf-8')]
if__name__=='__main__':
main()
2錛屽啀鐢ㄤ竴涓璁頒簨鏈鍐欏備笅鐨勪唬鐮侊細
@echooff
pythonlearning.py
pause
鍙﹀瓨涓衡樿繍琛.bat鈥
3銆佹妸鈥滆繍琛.bat鈥濆拰鈥渓earning.py鈥濇斁鍒板悓涓鐩褰曚笅,