• 技术文章 >后端开发 >PHP问题

    PHP程序中运行Python脚本的方法

    WBOYWBOY2022-09-09 13:48:59转载408

    php入门到就业线上直播课:进入学习

    (推荐教程:PHP视频教程

    介绍一下,如何在php程序中运行Python脚本,

    在php中python程序的运行,主要依靠 程序执行函数,

    这里说一下三个相关函数:exec(),system() 和 passthru()。

    这里主要讲 exec() 函数,介绍使用该函数传递参数,

    以及如何使用python返回josn数据供php使用。

    一、exec()

    执行一个外部程序

    exec ( string $command [, array &$output [, int &$return_var ]] ) : string

    参数说明:

    command:要执行的命令,其中包括三个子串,第一个子串为使用的当前系统的解释器,第二个子串为所要执行脚本的位置,第三个子串为所需传入的参数不限个数,中间用空格分隔,注意格式。子串间使用空格分割。

    output:如果提供了 output 参数,那么会用命令执行的输出填充此数组,每行输出填充数组中的一个元素。(说明:output 中存放的并非python中return的值,并且所有return的值都不会进行保存,output 中存放的是python脚本中输出的值,即为 print() 函数所输出的所有数据)

    return_var:如果同时提供 output 和 return_var 参数,命令执行后的返回状态会被写入到此变量。

    1、直接运行

    index.php

    <?php
    $re = exec('python ceshi.py', $out);
    // $re = iconv('gbk', 'utf-8', $re);
    var_dump($out);
    echo '<br/>';
    var_dump($re);

    ceshi.py

    def send():
        data = '1,2,3,4,5'
        print(data)
    if __name__ == '__main__':
        send()

    (重要说明:如果Python脚本返回的数据中含有中文,需要使用 iconv('gbk', 'utf-8', $re); 进行转义)

    2、传参,接收返回数据

    inde.php

    $canshu1 = '这是PHP传过来的参数';
    $canshu2 = date('Y-m-d');
    $re = exec("python ceshi.py $canshu1 $canshu2");
    $re = iconv('gbk', 'utf-8', $re);
    var_dump($re);

    test.py

    import sys
    def send():
        # a1 = sys.argv[1]
        # a2 = sys.argv[2]
        re = sys.argv[1:]
        data = '1,2,3,4,5,' + ','.join(re) # 转字符串
        print(data)
    if __name__ == '__main__':
        send()

    导入sys包,使用sys.argv[]数组获取传入参数,第一个传入参数为sys.argv[1],第二个为sys.argv[2]以此类推,不要使用argv[0]

    接收返回 json 数据:

    import sys
    import json
    def send():
        dict = {'id':111, 'title':'测试title'}
        dict['data'] = sys.argv[1:]
        jsonArr = json.dumps(dict, ensure_ascii=False)
        print(jsonArr)
    if __name__ == '__main__':
        send()

    (涉及到中文字符的时候,需要指定ensure_ascii=False)

    二、system()

    执行外部程序,并且显示输出

    system ( string $command [, int &$return_var ] ) : string

    同 C 版本的 system() 函数一样,本函数执行 command 参数所指定的命令,并且输出执行结果。

    如果 PHP 运行在服务器模块中, system() 函数还会尝试在每行输出完毕之后,自动刷新 web 服务器的输出缓存。

    如果要获取一个命令未经任何处理的 原始输出,请使用 passthru() 函数。

    index.php

    <?php
    echo '这是运行直接输出:';
    $re = system('python ceshi.py');
    // $re = iconv('gbk', 'utf-8', $re);
    echo '<br/>';
    echo '这是赋值输出:';
    var_dump($re);

    这里使用最初版本的 test.py,输出效果如下:

    三、passthru()

    执行外部程序,并且显示输出

    passthru ( string $command [, int &$return_var ] ) : void

    同 exec() 函数类似, passthru() 函数 也是用来执行外部命令(command)的。当所执行的 Unix 命令输出二进制数据,并且需要直接传送到浏览器的时候,需要用此函数来替代 exec() 或 system() 函数。常用来执行诸如 pbmplus 之类的可以直接输出图像流的命令。通过设置 Content-type 为 image/gif,然后调用 pbmplus 程序输出 gif 文件,就可以从 PHP 脚本中直接输出图像到浏览器。

    index.php

    echo '这是运行直接输出:';
    $re = passthru('python ceshi.py');
    // $re = iconv('gbk', 'utf-8', $re);
    echo '<br/>';
    echo '这是赋值输出:';
    var_dump($re);

    这里使用最初版本的 test.py,输出效果如下:

    (推荐教程:PHP视频教程

    以上就是PHP程序中运行Python脚本的方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:脚本之家,如有侵犯,请联系admin@php.cn删除
    专题推荐:php
    上一篇:php如何实现二维数组排序 下一篇:php怎么判断数组所有值是否都不为空
    VIP课程(WEB全栈开发)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• php怎么检测指定字符串中是否包含另一个字符串• PHP中常用的魔术方法(总结分享)• 为什么培训机构都不培训php了• 聊聊PHP面向对象设计的五个基准原则(S.O.L.I.D)• php如何实现二维数组排序
    1/1

    PHP中文网