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 sysdef 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 sysimport jsondef 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
<?phpecho '这是运行直接输出:';$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脚本相关推荐
- windows任务计划程序运行python脚本失败的原因
前言 用windows任务计划程序定时执行py脚本,为什么会执行失败?运行结果显示(0x1)? 直接闪退? 在IDE运行程序,正常运行 在文件管理器目录下运行程序,也没有问题. 但是为什么在任务计划程 ...
- windows的.bat批处理文件运行Python脚本程序
windows的.bat批处理文件运行Python脚本程序 文章目录: 一.如何创建 `.bat` 批处理文件 二.创建执行的Python脚本程序 一.如何创建 .bat 批处理文件 创建.bat 批 ...
- 安卓手机运行python程序的软件-安卓手机定时运行python脚本
话说现在智能手机的计算能力严重过剩啊,不玩游戏.不打电话.不刷微信时,要充分利用手机的计算潜力为我所用.完全可以把一些台式电脑上的计算任务移到手机上来运行.python就是一个很好的跨平台的解决方案. ...
- 树莓派能直接运行python程序_在树莓派上运行python脚本 - python
我正在研究rapiberry pi 3大约3个月,开始使用它时遇到了问题. 我找不到在树莓派打开时在其上运行python脚本的有效,安全的方法(没有监视器,鼠标和键盘).此刻,我在/ etc / pr ...
- python程序run不了_无法通过计划程序正确运行Python脚本
因此,我研究并测试了多种方法以使其发挥作用,但我们的IT人员和我自己都不确定如何继续.最终,我需要在服务器上运行三个python脚本,这些脚本查看一组Excel文件并扫描错误.如果有错误,它会通过电子 ...
- android运行python脚本,在android应用程序中运行python脚本
我想得到远程安装软件的列表电脑.为了我想在我的android中使用python脚本申请.现在,我有一个python脚本,它正在远程获取已安装软件的列表电脑.但是,我不知道如何在android中支持它. ...
- xampp python linux,Ubuntu的XAMPP着运行python脚本
因为某些原因我不得不将我的web应用程序我的本地机器上.我需要从python脚本中提取一些信息. 我跟着很多的指南,并在这里回答了stackoverflow,但我有一个奇怪的问题. 我有一个简单的We ...
- power python_在 Power BI Desktop 中运行 Python 脚本
在 Power BI Desktop 中运行 Python 脚本Run Python scripts in Power BI Desktop 06/02/2020 本文内容 你可以直接在 Power ...
- flask执行python脚本_如何在Flask中运行python脚本
我有一个Flask脚本,可以创建网站并动态打印一些数据.-打印的数据应来自另一个python脚本. 我目前面临的问题是,如果我将执行python脚本的行放在执行Flask应用程序的行之前,它将运行Py ...
最新文章
- 工作流引擎 Activiti 实战系列
- Ajax响应处理数据的三种格式(主要使用gson包)
- Intel 64/x86_64/IA-32/x86处理器 - 通用指令(4) - 比特位设置指令/字节设置指令
- SAP License:MM中的几个概念
- vs2010报错:转换到 COFF 期间失败: 文件无效或损坏 解决方法
- 线性代数及matlab实现,线性代数及其MATLAB应用
- 约瑟夫环C语言链表实现
- 【笔记】深入理解 Java 虚拟机:类文件结构
- Please define INSTALL4J_JAVA_HOME to point to a suitable JVM 的解决办法
- 烽火通信 c语言 笔试,C语言嵌入式笔试题目及参考答案-烽火通信.doc
- 科学计算机r系数的操作,R语言实现Fleiss’ Kappa系数处理多个观察者一致性检验...
- 2021年物联网竞赛-A卷-ZigBee【CC2530】
- 猫和计算机连接网络,宽带猫和路由器怎样连接 宽带猫和路由器连接方法【教程】...
- Love To Be Loved By You
- a eraser eraser还是an_是a eraser还是an eraser
- android 1.5 app,萌新编程app
- OSI七层网络模型介绍
- Mysql密码忘记怎么修改?
- Linux虚拟机如何修改mysql的数据目录位置
- STATA如何查找命令的帮助文件