PHP带参数传值调用python脚本

PHP主要用在服务器端做网站后台开发,有些功能用PHP来实现有点费劲或者无法实现,现在在学习python,同样是脚本语言,感觉python能做的事情PHP不一定能胜任。但是现在大部分的网站后台也是用PHP写的,虽然python可以作为WEB开发(flask,这个看了一段时间感觉既然网站用PHP开发好了,python可以做PHP做不好的事情,岂不是更好,逐暂缓),现在有在思考一个问题:有没有什么办法可以让PHP与python结合进来,PHP与python各做他们擅长的事情,毕竟工作中快速开发运行见效果还是占到了很大的需求比例。

  记得PHP中有一个函数可以运行第三方的脚本:exec(),来看看exec的函数结构:

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

  参数解释(来自PHP手册)

  command

  要执行的命令。

  output

  如果提供了 output 参数, 那么会用命令执行的输出填充此数组, 每行输出填充数组中的一个元素。 数组中的数据不包含行尾的空白字符,例如 \n 字符。 请注意,如果数组中已经包含了部分元素, exec() 函数会在数组末尾追加内容。如果你不想在数组末尾进行追加, 请在传入 exec() 函数之前 对数组使用 unset() 函数进行重置。

  return_var

  如果同时提供 output 和 return_var 参数, 命令执行后的返回状态会被写入到此变量。

  返回值:

  命令执行结果的最后一行内容。 如果你需要获取未经处理的全部输出数据, 请使用 passthru() 函数。

  如果想要获取命令的输出内容, 请确保使用 output 参数。

  PHP执行外部程序延伸:

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

  说明:

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

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

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

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

  参数:

  command

  要执行的命令。

  return_var

  如果提供 return_var 参数, 则外部命令执行后的返回状态将会被设置到此变量中。

  返回值:

  成功则返回命令输出的最后一行, 失败则返回 FALSE

  2、passthru — 执行外部程序并且显示原始输出

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

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

  参数:

  command

  要执行的命令。

  return_var

  如果提供 return_var 参数, Unix 命令的返回状态会被记录到此参数。

  返回值:

  没有返回值。

  这次使用的执行外部程序的函数为exec函数:

  PHP测试代码:

  

header("Content-type:text/html;charset=utf-8");
  // 测试PHP执行python代码
  $a = 5;
  $b = 8;
  $c = ‘Davidszhou的PHP操作带参数的python脚本并返回结果‘;
  $d = urlencode($c);
  unset($out);
  $c = exec("C:\python35\python plug/index.py {$a} {$b} {$d}",$out,$res);
  print_r(urldecode($out[0]));
  echo "<br>";
  echo ‘外部程序运行是否成功:‘.$res."(0代表成功,1代表失败)";

  python测试代码:

  

#-*- coding:utf-8 -*-
import sys
def ceshi(a,b,c):
    d = int(a)+int(b)
    r = int(d)+c
    return r
if __name__ == "__main__":
    res = ceshi(a=sys.argv[1],b=sys.argv[2],c = sys.argv[3])
    print(res)

 解释:

  1、exec问题:

  exec("C:\python35\python plug/index.py {$a} {$b} {$d}",$out,$res):"C:\python35\python":这是本地环境中python安装的绝对环境,‘plug/index.py’:这个是python脚本的目录,后面{$a} {$b} {$d}是紧随的参数注意它与python脚本目录之间以及每个参数之间的空格,

  2、python如何接收PHP给他传的参数

  python接收PHP传参数主要通过sys这个模块:

  解释(来自python手册):

  sys.argv

  传递给Python脚本的命令行参数列表。argv[0]是脚本的名称(是否是完整的路径名这要取决于操作系统)。如果使用解释器的-c命令行选项执行命令,则argv[0]设置为字符串‘-c‘如果无脚本名称传递给 Python 解释器, argv[0]是空字符串。

  若要遍历标准输入或命令行上给出的文件列表,请参阅fileinput模块。

原文地址:https://www.cnblogs.com/feng18/p/9211342.html

时间: 2024-11-10 01:45:49

PHP带参数传值调用python脚本的相关文章

shell调用python脚本,并且向python脚本传递参数

1.shell调用python脚本,并且向python脚本传递参数: shell中: python test.py $para1 $para2 python中: import sys def main($canshu1, $canshu2) ..... main(sys.argv[1], sys.argv[2]) 2.使用shell调用python中的函数: python脚本如下: test.py: import ConfigParser config = ConfigParser.Config

PHP 调用Python脚本

上次做用户反馈自动翻译,写了个python脚本,将日文的用户反馈翻译成中文,效果虽然可以,但其它不懂python的童鞋就没法使用了,所以搭了个web服务,让其他人可以通过网页访问查询.使用的是apache服务,具体环境(LAMP)搭建就不细说,主要分享php调用python脚本后台运行的处理. 1. PHP如何调用外部程序 首先要解决的问题就是php如何调用python脚本,在PHP中调用外部程序主要有两个函数,system和exec. system()原型:string system(stri

(转)java调用python脚本

这篇博客旨在吐血分享今天遇到的java调用python脚本遇到的坑,折腾了3个多小时终于可以跑通了,代码超级短,但网上的好多资料都是抄来抄去的,很少有能够直接跑通的,尤其是针对你的python文件中用到第三方类库的情况. 先来说说我为什么要用java调用python代码,原因就在于python在爬虫方面提供了丰富的类库,但我本来已经有一套java操作数据库以及消息中间件的代码,这些代码用python实现的话可能需要至少一周时间,为了减少时间成本,因此我决定用java调用python脚本的方式使用

Java调用Python脚本并获取返回值

在Java程序中有时需要调用Python的程序,这时可以使用一般的PyFunction来调用python的函数并获得返回值,但是采用这种方法有可能出现一些莫名其妙的错误,比如ImportError.在这种情况下可以采用另一种方法:使用Java的Runtime,像在命令行直接调用python脚本那样调用python程序.此时可以通过文件作为脚本参数来传递Python程序所需要的参数,并从脚本的输入输出流来获取本来该打印在控制台的结果. 先准备好一个python文件: def get_path(fi

java调用python脚本

常见的java调用python脚本方式 通过jython.jar提供的类库实现 (不建议使用,因为会报module没有找到的错误,总之就是很蛋疼,要设置一系列的参数) 通过Runtime.getRuntime()开启进程来执行脚本文件(建议使用,原因:简单粗暴我喜欢!!!)在这个里面注意:调用py脚本的时候,先用windows的dos界面去运行下 命令: python xxxx.py,测试,脚本可以调用,不然可能在java脚本就是调用了,但是就是失败了的情况,导致一直卡住,本人就是这样的一个情况

linux+php+apache web调用python脚本权限问题解决方案

lamp : linux + apache + mysql + php 在上篇随笔中linux+php+apache调用python脚本时出现的问题的根本原因是:apache运行时使用的apache用户权限不够: 由此想到的解决方案是将apache改用root用户来执行,修改/etc/httpd/conf/httpd.conf,但结果是apache运行不起来,初步 判断是apache出于安全方面的考虑,不允许使用root用户运行(此判断是否正确有待验证). 具体解决方案(验证通过): 在sudo

实现crontab定时调用python脚本,以及command not found的问题

操作 1.修改 /etc/crontab文件 调用python脚本和其他sh的不同是:需要写清楚调用哪个python解释器 例如: * 12 * * * root /usr/bin/python /home/admin/test.py 需要用/usr/bin/python 全路径指定. 另外需要在此前写root 表示调用账户. 2.增加日志 使用/home/admin/test.py.log 2>&1 把错误流重定向到标准输出流 全部配置如下: * 12 * * * root /usr/bi

Matlab 调用 Python 脚本

Matlab 调用 Python 脚本 最近尝试在 Matlab 环境中调用 Python 脚本,这里总结下碰到的几个问题. 1. Python 模块加载 在 Matlab 函数中,想要将 Python 文件作为模块加载,需要首先修改 Python 环境变量路径 P = py.sys.path; if count(P,modpath) == 0 insert(P,int32(0),modpath); end 修改好路径后,直接使用 import 命令加载 Python 模块会产生错误,需采用以下

如何使用CLI命令在输入文件参数上运行Python脚本来生成输出文件

如何使用CLI命令在输入文件参数上运行Python脚本来生成输出文件. 根据我的理解,analysis.py是python脚本,-s和-p是分别包含Sales.csv和Products.csv中的csv数据的变量名. 在analysis.py中,我如何接受存储在-s和-p中的两个CSV,然后创建一个名为SalesReport.csv的输出? 我是否会创建一个名为SalesReport.csv的空白csv文件,然后将分析的数据写入文件? 或者命令行是否会使用存储在sales-report变量中的数