博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在线 Python运行工具
阅读量:7212 次
发布时间:2019-06-29

本文共 2270 字,大约阅读时间需要 7 分钟。

摘要

昨天心血来潮,做了一个在线的PHP编辑工具 ,可以方便的练习PHP的基本语法,以及数据库的操作。结尾说可能会做一个Python版的在线编辑工具,那么说到做到。今天就写了个Python版的,供身边的同学以及初学者练习和使用。

准备

看过昨天的那篇博客的应该不难理解,这个工具背后的工作原理。

上传源码,运行脚本,反馈结果。

与之相比,这次的代码稍有些不同,毕竟昨天的是纯PHP代码之间的处理,而今天则是在PHP和Python之间的耦合。所以需要额外的增加一点处理。

PHP环境设置

在编码之前,应该先把PHP环境设置一下。具体来说就是修改一下php.ini文件。

去掉php.ini文件中的disable_functions前面的;,即可开启调用外部语言的拓展。

原理

这里说的原理,从狭义上来讲只是单纯的对于使用PHP调用Python代码。

一般来说有这么两种方式:

  • 通过system函数
  • 通过exec函数

这两个方法各有利弊,接下来将简单的介绍一下这两个函数的使用方法,至于怎么选择,按照自己的需求进行设置即可。

system方式

官方文档解释如下:

system官方文档

system函数本身具有打印命令执行输出的功能,也就是说,程序中的输出可在PHP页面中显示。

如果程序成功执行,则system的返回值为程序输出的最后一行,如果执行失败,返回false。

第二个参数是可选的,用来得到命令执行后的状态码,0表示成功调用外部程序,1表示调用失败。

exec 方式

官方文档有如下解释:

exec官方文档

exec ()函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。

虽然它只返回命令结果的最后一行,但用第二个参数array 可以得到完整的结果,方法是把结果逐行追加到array的结尾处。

另外需要注意的是:只有指定了第二个参数时,才可以用第三个参数,用来取得命令执行的状态码。

源码

核心

核心思路如下:

  • 获取用户输入Python源码,然后上传到服务器上的temp.py文件。
  • 通过PHP调用外部的Python代码,执行相关脚本。
  • 前台通过ajax方式请求代码运行结果,并显示在result页面块上。

完整代码

index.php

郭璞 的在线Python工具

下面将显示出您的代码的执行结果


callpy.php

这里的调用外部代码需要的功能很简单,所以就选择了system函数啦。

temp.py

temp.py说白了就是个临时文件,所以每次代码被运行的时候都会被更新一遍。所以里面的内容不重要了。下面给出我测试过一次之后的temp.py的文件内容。

#coding:utf8print "Hello 郭璞"from time import *print ctime()

演示

下面就是激动人心的测试界面啦。

首页

首页部分

提示信息

点击左侧上方的“Python代码”的时候,会给出一点提示信息。如:

提示信息

简要测试

此在线编辑工具可以方便的进行Python脚本的编写。只要是符合正规的Python语法的,都是可以的。

运行等待

当编写的Python脚本比较的耗时的时候,前台需要给出提示信息,并进行等待。所以最好的方式就是显示一条“程序正在运行中··· ···”,这样既能给用户更好的体验,也能体现更加人性化的设计。

耗时任务

耗时任务结束后的结果显示

高级测试

高级测试

错误提示

上面全是介绍,代码正常运行的结果。但是很多时候我们并不能一下子就编写出bug free 的代码,所以适时的给出点提示是个不错的选择。但是这里给的建议就是自主发现错误,亲自手动的检查自己的代码,更能养成规范的代码编写习惯。

脚本出现错误时

总结

回顾一下,本次的实验核心就在于PHP调用外部程序的两个简单的方式。虽然各有利弊,但是找到合适的场景进行选择的话,还是能取得不错的效果的。

其实上面的全是些无关痛痒的话题啦。真正有用的是整合起来,PHP在网站开发上面有Python不可比拟的优势(虽然Python写起网站来一点也不虚)。但是Python的灵活又是PHP不可替代的。

通过今天这个测试,也不难想到了吧。倘若能恰当的将这两者进行整合,想必一定能做出一个既优雅,又高效的系统。

最后,我把这个工具上传到了自己的服务器上了。如果有想练习PHP语法,Python语法的意愿,可以和我取得联系。

联系方式在左侧的友情链接处可以找到。(^__^) 嘻嘻……

你可能感兴趣的文章
Android Pie提供了自适应供电、神经网络API 1.1等新特性
查看>>
蓝云公布2019云生态战略,如何解决企业上云关键问题?
查看>>
FaaS、PaaS和无服务器体系结构的优势
查看>>
Ceylon语言加入Eclipse基金会
查看>>
一文盘点MWC 2019所有5G设备和研发进展
查看>>
【leetcode】85. Maximal Rectangle 0/1矩阵的最大全1子矩阵
查看>>
网站真分页js代码该怎么写?
查看>>
教你五分钟入门使用html5 svg绘制图形
查看>>
vue-concise-slider vue滑动组件
查看>>
ElectronOCR:基于Electron+React+Tesseract的MACOS下的OCR工具
查看>>
Mysql 架构及优化之-定时计划任务
查看>>
不插即用!配备微信网页授权模块的CodeIgniter应用脚手架
查看>>
HBase存储剖析与数据迁移
查看>>
人工智能高考511分,未来有望考上东京大学!
查看>>
O2O业务都跳不出这五大领域
查看>>
呼之欲出的量子计算机和漫长的最后一公里
查看>>
“九”答不可 | 量子保密,完美无缺?
查看>>
VMware备份研究
查看>>
dotnet调用node.js写的socket服务(websocket/socket/socket.io)
查看>>
Nibiru Open Day,OZO 遇见 DigiArtist 国际数字艺术展
查看>>