介绍一下,如何在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脚本相关推荐

  1. windows任务计划程序运行python脚本失败的原因

    前言 用windows任务计划程序定时执行py脚本,为什么会执行失败?运行结果显示(0x1)? 直接闪退? 在IDE运行程序,正常运行 在文件管理器目录下运行程序,也没有问题. 但是为什么在任务计划程 ...

  2. windows的.bat批处理文件运行Python脚本程序

    windows的.bat批处理文件运行Python脚本程序 文章目录: 一.如何创建 `.bat` 批处理文件 二.创建执行的Python脚本程序 一.如何创建 .bat 批处理文件 创建.bat 批 ...

  3. 安卓手机运行python程序的软件-安卓手机定时运行python脚本

    话说现在智能手机的计算能力严重过剩啊,不玩游戏.不打电话.不刷微信时,要充分利用手机的计算潜力为我所用.完全可以把一些台式电脑上的计算任务移到手机上来运行.python就是一个很好的跨平台的解决方案. ...

  4. 树莓派能直接运行python程序_在树莓派上运行python脚本 - python

    我正在研究rapiberry pi 3大约3个月,开始使用它时遇到了问题. 我找不到在树莓派打开时在其上运行python脚本的有效,安全的方法(没有监视器,鼠标和键盘).此刻,我在/ etc / pr ...

  5. python程序run不了_无法通过计划程序正确运行Python脚本

    因此,我研究并测试了多种方法以使其发挥作用,但我们的IT人员和我自己都不确定如何继续.最终,我需要在服务器上运行三个python脚本,这些脚本查看一组Excel文件并扫描错误.如果有错误,它会通过电子 ...

  6. android运行python脚本,在android应用程序中运行python脚本

    我想得到远程安装软件的列表电脑.为了我想在我的android中使用python脚本申请.现在,我有一个python脚本,它正在远程获取已安装软件的列表电脑.但是,我不知道如何在android中支持它. ...

  7. xampp python linux,Ubuntu的XAMPP着运行python脚本

    因为某些原因我不得不将我的web应用程序我的本地机器上.我需要从python脚本中提取一些信息. 我跟着很多的指南,并在这里回答了stackoverflow,但我有一个奇怪的问题. 我有一个简单的We ...

  8. power python_在 Power BI Desktop 中运行 Python 脚本

    在 Power BI Desktop 中运行 Python 脚本Run Python scripts in Power BI Desktop 06/02/2020 本文内容 你可以直接在 Power ...

  9. flask执行python脚本_如何在Flask中运行python脚本

    我有一个Flask脚本,可以创建网站并动态打印一些数据.-打印的数据应来自另一个python脚本. 我目前面临的问题是,如果我将执行python脚本的行放在执行Flask应用程序的行之前,它将运行Py ...

最新文章

  1. 工作流引擎 Activiti 实战系列
  2. Ajax响应处理数据的三种格式(主要使用gson包)
  3. Intel 64/x86_64/IA-32/x86处理器 - 通用指令(4) - 比特位设置指令/字节设置指令
  4. SAP License:MM中的几个概念
  5. vs2010报错:转换到 COFF 期间失败: 文件无效或损坏 解决方法
  6. 线性代数及matlab实现,线性代数及其MATLAB应用
  7. 约瑟夫环C语言链表实现
  8. 【笔记】深入理解 Java 虚拟机:类文件结构
  9. Please define INSTALL4J_JAVA_HOME to point to a suitable JVM 的解决办法
  10. 烽火通信 c语言 笔试,C语言嵌入式笔试题目及参考答案-烽火通信.doc
  11. 科学计算机r系数的操作,R语言实现Fleiss’ Kappa系数处理多个观察者一致性检验...
  12. 2021年物联网竞赛-A卷-ZigBee【CC2530】
  13. 猫和计算机连接网络,宽带猫和路由器怎样连接 宽带猫和路由器连接方法【教程】...
  14. Love To Be Loved By You
  15. a eraser eraser还是an_是a eraser还是an eraser
  16. android 1.5 app,萌新编程app
  17. OSI七层网络模型介绍
  18. Mysql密码忘记怎么修改?
  19. Linux虚拟机如何修改mysql的数据目录位置
  20. STATA如何查找命令的帮助文件

热门文章

  1. Spring 配置context:component-scan产生的错误
  2. SwiftUI模仿微信 聊天list
  3. 通过uiautomator2控制雷电模拟器里的程序
  4. MAC下的word里面照片突然不能在线裁剪,裁剪框变成了灰色;
  5. 微信小程序转发获取积分
  6. 本地生成动漫风格 AI 绘画 图像|Stable Diffusion WebUI 的安装和局域网部署教程
  7. Java 线程同步与死锁 学习笔记
  8. Word必备实用技巧7-10,每一条都令人欣喜若狂
  9. ORACLE锁表如何批量解锁?如何查找锁表原因?
  10. 复制excel的内容到页面