加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

浅谈PHP运行Python脚本的技巧

发布时间:2022-07-19 14:04:08 所属栏目:PHP教程 来源:互联网
导读:本次问题产生的环境是建议在windows环境下,利用IIS+PHP去调用Python脚本失败的前提下。如果你的环境与本次问题的环境不符。请自动规避。 在产品需求分析到一定阶段,各个部门之间需要一定的协调。然后我们做全栈开发的就需要把这些都笼统协调起来。也就出现
  本次问题产生的环境是建议在windows环境下,利用IIS+PHP去调用Python脚本失败的前提下。如果你的环境与本次问题的环境不符。请自动规避。
 
  在产品需求分析到一定阶段,各个部门之间需要一定的协调。然后我们做全栈开发的就需要把这些都笼统协调起来。也就出现了后台同时去调起不同模块、不同开发语言的需求。
 
  首先后台使用的是IIS+PHP的环境,且运行在windows上。通过PHP去调用Python的程序。
 
  先说问题:在Python、PHP都加入系统的环境变量(且在cmd的模式下能正常运行)的前提下,通过运行a.php去调起1.py
 
  PHP代码(a.php)
 
  fl=open('test3.txt', 'w')
 
  fl.write("5,5,5,1,2,3")
 
  fl.close()
 
  两个目录文件在同一目录下。且IIS可执行权限给足(为了重现问题所在,就写了最简单的代码)然后就出现了运行报错。
 
  然后我将PHP代码改进,查看exec函数执行的错误状态码
  
 
  $result = exec("py 1.py", $array, $ret);
 
  var_dump($result);
 
  var_dump($array);
 
  var_dump($ret);
 
  发现错误码为103(执行错误)
 
  【推荐学习:《PHP视频教程》】
 
  这一次我就将exec函数中的bash改成了标准输出(为了确定具体错误信息)
 
  PS:在bash中0,1,2三个数字分代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制台),标准错误(出错信息输出)。
  
 
  $result = exec("py 1.py 2>error.txt", $array, $ret);
 
  var_dump($result);
 
  "python 1.py 2>error.txt"
 
  这一次给我的错误居然是【'python' 不是内部或外部命令,也不是可运行的程序或批处理文件。】我甚至一度怀疑这台电脑有了他自己的想法。就在翻遍所有资料后。我突然想起可能是由于PHP是运行在IIS的服务器上,然而IIS并不是一个所有用户权限(这一点即是IIS建站目录权限控制的优点,又是IIS建站的缺点)。结合之前error.txt文件报的错误。我就将代码做一下修改。
  
 
  $res = exec("你python的安装绝对路径/python.exe 1.py 2>error.txt", $array, $ret);
 
  var_dump($result);
 
  var_dump($array);
 
  var_dump($ret);
 
  然后将python这个文件下所有文件的用户拥有者增加一个IIS用户控制可执行权限。
 
  这次PHP能找到了Python的可执行exe,成功将我们的代码执行了。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读