## 一:php调用python脚本 并传入参数,并接收返回值

php调用python脚本可以用 system()exec()passthru() 函数,本篇文章主要介绍exec 函数

exec有三个参数,第一个参数为一个字符串,包括三个子串,起一个子串为使用的当前系统的解释器,如果直接写python则默认为系统默认的解释器,也可以指定本地python.exe 的路径。第二个子串为所要执行的python脚本的位置。第三个子串为所需传入的参数不限个数,中间用空格分隔,注意格式。子串间空格分割。

tips:如果使用相对路径指定脚本位置,或者在python脚本中使用了文件的相对路径,都需要改为当前php文件所对应的相对路径。

第二个参数是php接收的python脚本的返回值,注意,此处的$out中存放的并非python中return的值,并且所有return的值都不会进行保存,$out中存放的是python脚本中输出的值,即为print()函数所输出的所有数据,每次print()都会记录为一条字典数据,组合成array数组如下图:

第三个参数为执行情况的状态码,如果执行成功,返回0,否则返回一个非0数

二:python获取php传递参数

导入sys包

img
img

使用sys.argv[ ]数组获取传入参数,第一个传入参数为sys.argv[1],第二个为sys.argv[2]以此类推,不要使用argv【0】

img
img

tips:如果要获取python脚本的返回值,直接在python脚本中print()出来,$out数组会自动记录,而system()和passthru()在获取返回值上存在一定缺陷。使用数组作为参数,python接收时会将数组变为一个“Arrqy”字符串,所以本文的解决方案为将传入数组写成字符串,在python中重新分割为数组。

在linux上使用php调用python 可能会出现文件写入权限的问题,需要更改文件的读写权限。在linux上调用python脚本时一定要明确指出exec()函数中python 的绝对路径并安装好所有需要的包,否则会报错


参考:https://blog.csdn.net/qq_39490713/article/details/81543174?utm_source=copy