PHP程序运行Python脚本(接收数据及传参)


orchid
电梯物联网专家 2024-01-23 10:34:54 52142 赞同 0 反对 0
分类: 资源 标签: 后端
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,输出效果如下:

图片

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
电梯物联网专家L2
粉丝 1 资源 185 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  130
统信桌面专业版【全盘安装UOS系统】介绍  128
银河麒麟桌面操作系统安装佳能打印机驱动方法  120
银河麒麟桌面操作系统 V10-SP1用户密码修改  108
麒麟系统连接打印机常见问题及解决方法  27
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
麒麟系统连接打印机常见问题及解决方法 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益210.13元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!