我的编程空间,编程开发者的网络收藏夹
学习永远不晚

在线 Python运行工具

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

在线 Python运行工具

    • 摘要
    • 准备
      • PHP环境设置
    • 原理
      • system方式
      • exec 方式
    • 源码
      • 核心
      • 完整代码
        • indexphp
        • callpyphp
        • temppy
    • 演示
      • 首页
      • 提示信息
      • 简要测试
        • 运行等待
      • 高级测试
      • 错误提示
    • 总结

摘要

昨天心血来潮,做了一个在线的PHP编辑工具 http://blog.csdn.net/marksinoberg/article/details/53869637 ,可以方便的练习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

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>郭璞 的在线Python工具</title>
<link rel="shortcut icon" href="favicon.ico" type="image/x-ico" />
<style>
.container {
    width: 1356px;
    height: 640px;
    position: absolute;
    background: #CCC;
}

.left {
    width: 50%;
    height: 100%;
    background: lightgray;
    position: relative;
    float: left;
}

.header {
    width: auto;
    height: 61px;
}

input {
    width: 180px;
    height: 60px;
    position: relative;
    background: lightgreen;
    float: right;
    margin-right: 12px;
    margin-top: 6px;
    border-radius: 25px;
    box-shadow: 1px 1px 1px #6e6e6e;
}

.panel {
    width: 90%;
    height: 540px;
    align: center;
}

textarea {
    font-size: 22px;
}

.right {
    width: 50%;
    height: 100%;
    background: deepskyblue;
    position: relative;
    float: right;
}
</style>

</head>
<body>
    <div class="container">
        <div class="left">
            <div class="header">
                <label><font size="5">在下面写上您的<a href="#" id="tip">Python代码</a>.</font></label>
                <input id="btn_run" type="submit" value="点击运行"></input>
            </div>
            <hr>
            <div class="panel">
                <textarea id="source" style="width: 645px; height: 540px;"
                    name="source" placeholder="echo 'Hello World!';">print "Hello 郭璞"
                    </textarea>
                <!-- <textarea type="hidden" id="hidden" hidden></textarea> -->
            </div>
        </div>
        <div class="right">
            <h2>下面将显示出您的代码的执行结果</h2>
            <hr>
            <div class="panel">
                <textarea id="result" style="width: 645px; height: 540px;">

                </textarea>
            </div>
        </div>
    </div>

    <!-- 编写提交脚本,并获取返回结果 -->
    <script class="lazy" data-src="./js/jquery-2.2.4.min.js"></script>
    <script>
        // 请求运行结果
        function getResult() {
            document.getElementById("result").value = "代码正在运行中 ···";
            $.ajax({
                type : "GET",
                url : "./callpy.php",
                success : function(data) {
                    document.getElementById("result").value = data;
                },

                error : function(err) {
                    document.getElementById("result").value = err;
                }
            });
        }

        // 将源代码上传到服务器上
        function uploadSource() {
            var source = document.getElementById("source").value;
            $.ajax({
                    type: "POST",
                    url: "./index.php",
                    data: {
                        "source": source 
                        },
                    success: function(){
                        console.log("代码上传成功!");
                        },
                    error: function(err){
                        console.log("代码上传失败!");
                        alert(err);
                        }
                });
        }


        // 使用ajax来 获取执行的结果
        $(document).ready(function() {
            document.getElementById("result").value = "正在获取运行结果··· ···";
            $("#btn_run").click(function(){
                // 先上传代码
                uploadSource();
                // 请求代码运行后的结果
                getResult();
            });
        });


        // 点击“Python代码”显示提示信息
        $(document).ready(function(){
            $("#tip").click(function(){
                document.getElementById("result").value = "您可以使用Python2.7.12以及向下兼容的Python语法。\n注意您的代码的缩进。另外,如果有需要连接数据库,请联系郭璞。QQ:1064319632";
            });
        });
    </script>
    <!-- 编写php脚本,获取提交信息 -->
    <?php
    $source = $_POST ['source'];
    $source = "#coding:utf8\n" . $source;
    file_put_contents ( "./temp.py", $source );

    ?>
</body>
</html>

callpy.php

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

<?php

$command = "python ./temp.py";

$flag = system($command, $result);

if($flag) {
    echo $result[0];
}else{
    echo "不好意思,代码运行出错啦。\n\n\n您的语法有问题哟:\n请检查一下标点符号,代码缩进,单词拼写什么的吧!";
}

temp.py

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

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

演示

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

首页

首页部分

提示信息

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

简要测试

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

运行等待

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

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

高级测试

高级测试

错误提示

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

脚本出现错误时

总结

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

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

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

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

在线 Python运行工具

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

在线 Python运行工具

摘要准备PHP环境设置原理system方式exec 方式源码核心完整代码indexphpcallpyphptemppy演示首页提示信息简要测试运行等待高级测试错误提示总结摘要昨天心血来潮,做了一个在线的PHP编辑工具 http://b
2023-01-31

Python在线运行代码助手

Python代码运行助手可以让你在线输入Python代码,然后通过本机运行的一个Python脚本来执行代码。原理如下: 在网页输入代码:点击Run按钮,代码被发送到本机正在运行的Python代码运行助手; Python代码运行助手将代码保存
2022-06-04

如何进行Shell在线工具使用

如何进行Shell在线工具使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Shell 学习Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shel
2023-06-05

chkdsk工具如何运行

这篇“chkdsk工具如何运行”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“chkdsk工具如何运行”文章吧。chkdsk工
2023-01-29

在线课堂工具

1.什么是在线课堂工具?随着互联网技术的发展,传统的教育方式正在逐渐被在线教育所取代。在线课堂工具是一种能够帮助教师和学生进行远程教学的工具,它可以让教师通过网络将课程内容传输给学生,并且可以实时互动和交流。2.在线课堂工具有哪些特点?2.1实时互动在线课堂工具可以实现师生之间的实时互动,教师可以通过语音、视频等方式与
在线课堂工具
2024-01-19

python ansible自动化运维工具执行流程

目录ansible 简介ansible 任务执行ansible 配置详解ansible 常用命令ansible 常用模块ansible 简介 ansible 是什么?ansible是新出现的自动化运维工具,基于Python开发,集合了众多运
2022-06-02

windows下adb工具如何运行

这篇“windows下adb工具如何运行”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“windows下adb工具如何运行”文
2023-07-04

AMD Fusion游戏工具在Intel平台上的运行

AMD Fusion for Gaming是AMD为游戏玩家提供的一款轻量级优化工具,能够根据预设对系统进行调整,优化资源占用和软硬件性能,在玩家需要游戏的时候暂时禁用不必要的后台服务,实现系统计算性能的最大化。经过四个月的测试后,AMD终
2023-05-24

怎么在Python的线程中运行协程

这篇文章主要讲解了“怎么在Python的线程中运行协程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Python的线程中运行协程”吧!有没有办法让同步代码与异步代码看起来也是同时运行的
2023-06-16

AMD Fusion游戏工具怎样运行在Intel平台上

本篇文章给大家分享的是有关AMD Fusion游戏工具怎样运行在Intel平台上,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。AMD Fusion for Gaming是AMD
2023-06-14

Python click——命令行工具

我们的游戏资源处理工具是python实现的,功能包括csv解析,UI材质处理,动画资源解析、批处理,Androd&iOS自动打包等功能。该项目是由其他部门继承过来的,由于绝大部分代码不符合我们的业务需求,所以进行了大重构。删除了所有业务代码
2023-01-31

在线Unicode编码转换工具

在线Unicode编码转换工具是一种用于将字符或文本转换为Unicode编码的工具。功能有:1、字符转Unicode编码;2、文本转Unicode编码:;3、Unicode编码转字符;4、Unicode编码转文本。Unicode编码是一种用
2023-07-10

MySQL[3] 在线热备工具Xtrab

mysqldump是一种逻辑备份方式,将数据转换成sql文件,其最大的缺陷就是备份和恢复时间很长,对于一个小于10G的数据库而言,这个速度还是可以接受的,但是如果数据库较大,那在使用mysqldump备份就非常不合适了。lvm是一种采用逻辑
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录