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模块。

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

  1. java调用python脚本并向python脚本传递参数

    1.安装Eclipse 先安装jdk,再安装Eclipse,成功后开始建立py_java项目,在这个项目的存储目录SRC下建立test包,在test包中New-Class,新建MyDemo类,建好完成 ...

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

    1.shell调用python脚本,并且向python脚本传递参数: shell中: python test.py $para1 $para2 python中: import sys def main ...

  3. PHP 调用Python脚本

    上次做用户反馈自动翻译,写了个python脚本,将日文的用户反馈翻译成中文,效果虽然可以,但其它不懂python的童鞋就没法使用了,所以搭了个web服务,让其他人可以通过网页访问查询.使用的是apac ...

  4. C++中调用Python脚本

    C++中调用Python脚本的意义就不讲了,至少你可以把它当成文本形式的动态链接库, 需要的时候还可以改一改,只要不改变接口, C++的程序一旦编译好了,再改就没那么方便了 先看Python的代码 代 ...

  5. (转)java调用python脚本

    这篇博客旨在吐血分享今天遇到的java调用python脚本遇到的坑,折腾了3个多小时终于可以跑通了,代码超级短,但网上的好多资料都是抄来抄去的,很少有能够直接跑通的,尤其是针对你的python文件中用 ...

  6. C#调用Python脚本的简单示例

    C#调用Python脚本的简单示例 分类:Python (2311)  (0)  举报  收藏 IronPython是一种在 .NET及 Mono上的 Python实现,由微软的 Jim Huguni ...

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

    在Java程序中有时需要调用Python的程序,这时可以使用一般的PyFunction来调用python的函数并获得返回值,但是采用这种方法有可能出现一些莫名其妙的错误,比如ImportError.在 ...

  8. C++中调用Python脚本(转载)

    转载▼ 标签: 杂谈 C++中调用Python脚本的意义就不讲了,至少你可以把它当成文本形式的动态链接库,需要的时候还可以改一改,只要不改变接口, C++的程序一旦编译好了,再改就没那么方便了先看Py ...

  9. jenkins发布程序触发shell调用python脚本刷新akamai cdn api

    刷新cdn的流程:jenkins获取git中的代码,触发脚本推送到生产环境中(即cdn的源站) --> 触发脚本获取git工作目录的更新列表,将更新列表拼凑成带域名信息的url,写入到目录中 - ...

随机推荐

  1. Jalor 5学习心得

    jalor5是一套功能强大的框架,该框架集成了spring.mybatis.cxf.日志.异常等组件,和其它未提及的部分组件,如消息组件. 它还自带了权限管理,内容管理,国际化等功能,该框架在项目开发 ...

  2. LNMP环境下部署搭建wordpress

    1. 下载WordPress安装包 访问官方网站https://cn.wordpress.org/ 点击Download.tar.gz下载linux平台安装包 2. 安装软件 2.1.上传安装包 使用 ...

  3. SSIS中xml的输入输出

    输出为XML的两种方法 1.用数据流, 将平面文件作为DES输出 在SQL里将要输出的数据查询成为单列的字符串: SELECT (SELECT * FROM A FOR XML ROOT('A'),E ...

  4. monkey常用命令实例

    一.常用命令的使用 1.monkey进行压力测试的命令是什么呢? adb shell monkey -p <packagename> <count> eg: adb shell ...

  5. java学习入门之---使用idea创建第一个maven项目

    一.准备条件: 1.安装idea旗舰版 2.安装tomcat 二.打开idea开始创建 1.创建Project 2.选择项目类型为maven 3.输入组名和项目名 ---> 下一步 ----&g ...

  6. 浅析CompareAndSet(CAS)

    最近无意接触了AtomicInteger类compareAndSet(从JDK5开始),搜了搜相关资料,整理了一下 首先要说一下,AtomicInteger类compareAndSet通过原子操作实现 ...

  7. 机器翻译评价指标 — BLEU算法

    1,概述 机器翻译中常用的自动评价指标是 $BLEU$ 算法,除了在机器翻译中的应用,在其他的 $seq2seq$ 任务中也会使用,例如对话系统. 2 $BLEU$算法详解 假定人工给出的译文为$re ...

  8. 最新版jQuery v3.3.1的BUG以及解决办法(什么问题不重要,怎么解决问题才重要)

    发现问题 最新版的 FineUIPro v5.2.0 中,我们将内置的 jQuery v1.12.4 升级到 jQuery v3.3.1 ,可以看升级记录: +升级到jQuery v3.3.1.    ...

  9. 记一次因为session引起的并发问题

    在做一个DSP系统(不要纠结这个系统是做什么的)时,碰到了一个很奇特的bug. 事情背景: 1.媒体方要求素材必须通过API提交给他们审核后,方可投放使用. 2.上线不久,运营反馈“每当提交素材的时候 ...

  10. Educational Codeforces Round 61 (Rated for Div. 2)-C. Painting the Fence 前缀和优化

    题意就是给出多个区间,要求去掉两个区间,使得剩下的区间覆盖范围最大. 当然比赛的时候还是没能做出来,不得不佩服大佬的各种姿势. 当时我想的是用线段树维护区间和,然后用单点判0,维护区间间断个数.然后打 ...