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

在PHP程序中运行Python脚本(接收数据及传参)的方法详解

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

在PHP程序中运行Python脚本(接收数据及传参)的方法详解

介绍一下,如何在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程序中运行Python脚本(接收数据及传参)的方法详解的文章就介绍到这了,更多相关PHP运行Python脚本内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

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

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

在PHP程序中运行Python脚本(接收数据及传参)的方法详解

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

下载Word文档

猜你喜欢

Win8系统运行程序提示"占位程序接收到错误数据"的故障原因及解决方法

Win8系统在打开某些程序的时候会弹出一个错误提示:“占位程序接收到错误数据”,有时候在打开计算机管理器或者是查看电脑的信息的时候也会出现这个提示,具体现象如下所示故障原因分析:这有可能是配置文件受损引起的。解决方法
2022-06-04

编程热搜

  • 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动态编译

目录