天涯论坛

 找回密码
 立即注册
搜索
查看: 16|回复: 2

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

[复制链接]

3061

主题

3万

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99139052
发表于 2024-10-4 12:45:26 | 显示全部楼层 |阅读模式

介绍一下,怎样在php程序中运行Python脚本,

在php中python程序的运行,重点依靠 程序执行函数,

这儿说一下三个关联函数:exec(),system() 和 passthru()。

这儿重点讲 exec() 函数,介绍运用该函数传递参数,

以及怎样运用python返回josn数据供php运用

1、exec() — 执行一个外边程序

exec ( string $command [, array &$output [, int &$return_var ]] ) : string

参数说明

command:要执行的命令,其中包含三个子串,第1个子串为运用的当前系统的解释器,第二个子串为所要执行脚本的位置,第三个子串为所需传入的参数不限个数,中间用空格分隔,重视格式。子串间运用空格分割。

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[]数组获取传入参数,第1个传入参数为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)

2、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,输出效果如下:

3、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,输出效果如下:

本文为冯奎原创文案,转载无需和我联系,但请注明来自冯奎博客fengkui.net





上一篇:Windows 版 WhatsApp 准许 Python、PHP 脚本在无任何提示下执行
下一篇:[精选] PHP程序运行Python脚本,怎么样接收数据及传参
回复

使用道具 举报

3126

主题

3万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99108615
发表于 2024-10-10 02:48:00 | 显示全部楼层
祝福你、祝你幸福、早日实现等。
回复

使用道具 举报

3070

主题

3万

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99138950
发表于 2024-10-25 15:48:45 | 显示全部楼层
你的话语真是温暖如春,让我心生感激。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 09:32 , Processed in 0.374487 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.