在PHP上调用python程序的三种方法

在php中python程序的运行,主要依靠 程序执行函数,

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

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

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

参数说明 :

  1. command:要执行的命令,其中包括三个子串,第一个子串为使用的当前系统的解释器,第二个子串为所要执行脚本的位置,第三个子串为所需传入的参数不限个数,中间用空格分隔,注意格式。子串间使用空格分割。
  2. output:如果提供了 output 参数,那么会用命令执行的输出填充此数组,每行输出填充数组中的一个元素。
    • output 中存放的并非python中return的值,并且所有return的值都不会进行保存,output 中存放的是python脚本中输出的值,即为print() 函数所输出的所有数据
  3. return_var:如果同时提供 output 和 return_var 参数,命令执行后的返回状态会被写入到此变量。

二、system() — 执行外部程序,并且显示输出

system ( string $command [, int &$return_var ] ) : string

同 C 版本的 system() 函数一样,本函数执行 command 参数所指定的命令,并且输出执行结果。

如果 PHP 运行在服务器模块中,  system() 函数还会尝试在每行输出完毕之后,自动刷新 web 服务器的输出缓存。

如果要获取一个命令未经任何处理的 原始输出,请使用  passthru() 函数。

三、passthru() — 执行外部程序,并且显示输出

passthru ( string $command [, int &$return_var ] ) : void

同 exec() 函数类似,  passthru() 函数 也是用来执行外部命令(command)的。当所执行的 linux命令输出二进制数据,并且需要直接传送到浏览器的时候,需要用此函数来替代 exec() 或 system() 函数。常用来执行诸如 pbmplus 之类的可以直接输出图像流的命令。通过设置 Content-type 为 image/gif,然后调用 pbmplus 程序输出 gif 文件,就可以从 PHP 脚本中直接输出图像到浏览器。

四、重要说明

  1. 如果Python脚本返回的数据中含有中文,需要使用  iconv('gbk', 'utf-8', $re); 进行转义。
  2. PHP调用shell命令运行python脚本 只能在终端显示,在浏览器无效的解决方法(nginx)。
    • 查看在disable_functions中exec是否被禁用,如果被禁用,请到/etc/nginx中的php.ini中删掉exec。
    • 查看python脚本的权限,将其设置为www用户755权限。
    • python中有import的重点!)如果你在python脚本中使用了这样的语句 import XXXXXX ,请从/usr/local/lib/python2.7/dist-packages/(自己的python是什么样的自己找)中找到import的文件,将其复制到你的直接运行的脚本同目录下,这样不用担心import没有超级用户权限的问题。

五、参考文献

您可能还喜欢...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注