在PHP程序中运行Python脚本(接收数据及传参)的方法详解
作者:PHP开源社区 发布时间:2023-11-24 10:14:48
介绍一下,如何在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,输出效果如下:
来源:https://mp.weixin.qq.com/s/b463lhAKIym2C3iC4gUWnQ
猜你喜欢
- 本文实例讲述了php生成curl命令行的方法。分享给大家供大家参考,具体如下:示例:curl "http://localhost/
- 我们在用爬虫对门户网站进行模拟登录是总会有输入图片验证码的,例如这种那我们怎么解决这个问题实现全自动的模拟登录呢?只要思想不滑坡,办法总比困
- “重构”的春风吹遍大江南北,互联网一时间风声鹤唳,“div+CSS”俨然已成为一种“时尚”,难以尽数的网站都不约而同地开始了自己的“重构”。
- 询问度娘搭好appium和python环境,开启移动app自动化的探索(基于Android),首先来记录下如何启动待测的app吧!如何启动A
- 作为收费应用方面的数据库管理员(DBA),公司首席信息官(CIO)经常邀请我与Sarbanes-Oxley审查员开会讨 * 司数据的安全与整合
- 本文主要介绍如何通过python生成ppt文件,以及借助ppt模板来生成ppt环境python 3python-pptx安装pip3 ins
- #/usr/bin/env/python#coding=utf-8import sys,re,time,osmaxdata = 50000
- 环境:Python+keras,后端为Tensorflow训练集:MNIST对于如何训练一个识别手写数字的神经网络,网上资源十分丰富,并且能
- Js 的异步确实完美地解决了单线程的问题,但是同时也会带来许多问题。而且随着用的框架越来越多,越来越复杂,定位问题的难度也随之上升。不知为什
- 本文主要介绍了OpenCV 图像对比度,具有一定的参考价值,感兴趣的可以了解一下实现原理图像对比度指的是一幅图像中明暗区域最亮的白和最暗的黑
- 方法一:var tableInit = table.render({ elem:
- 1.InnoDB的锁定机制InnoDB存储引擎支持行级锁,支持事务处理,事务是有一组SQL语句组成的逻辑处理单元,他的ACID特性如下:原子
- 一、获取抖音视频连接得到如下信息: “5.1 HV:/ 守门员戴手套没法系鞋带这种体育精神,值得尊敬%遇见足球 %足球 %精彩进球 %意甲
- 建表,主键自增create table aaa(id bigint identity(1,1) not null PRIMARY key,n
- 背景开发项目时应学会站在巨人的肩膀上,即有效利用开发组件进行或工具提升自己的研发效率对于较简单的单体函数而言,只需要依赖原生的SDK即可完成
- python字符串连接的方法,一般有以下三种:方法1:直接通过加号(+)操作符连接website = 'python' +
- Python面向对象编程(一)Python面向对象编程(二)Python面向对象编程(三)一、对象的继承Python中支持一个类同时继承多个
- 一 前言前一段时间接二连三的出现开发人员在测试环境和生产误操作导致数据库误删除/更新,对DBA而言,回滚数据着实是一件头疼的事情,凡涉及到恢
- 本文实例讲述了ThinkPHP中url隐藏入口文件后接收alipay传值的方法。分享给大家供大家参考。具体方法如下:现在公司项目的需求变化多
- 嗯,你可以说我很无聊。最近疯狂加班,今天才得以有时间搞一个CSS的像素图来消遣休息下。先看效果:运行代码框<!DOCTYPE html