注:本次问题产生的环境是建议在windows环境下,利用IIS+PHP去调用Python脚本失败的前提下。如果你的环境与本次问题的环境不符。请自动规避。

在产品需求分析到一定阶段,各个部门之间需要一定的协调。然后我们做全栈开发的就需要把这些都笼统协调起来。也就出现了后台同时去调起不同模块、不同开发语言的需求。

首先后台使用的是IIS+PHP的环境,且运行在windows上。通过PHP去调用Python的程序。

先说问题:在Python、PHP都加入系统的环境变量(且在cmd的模式下能正常运行)的前提下,通过运行a.php去调起1.py

PHP代码(a.php)

$result = exec("py 1.py");

var_dump($result);

Python代码(1.py)

print("123");

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(执行错误)

这一次我就将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);

var_dump($array);

var_dump($ret);

这一次运行以后,打开error.txt居然出现了:Can't find a default Python.这种错误(前提我是将python加入了环境变量且cmd状态下能直接运行py文件),感觉就遇到了不能言语的错误。在充分排查环境变量、可执行权限等错误以后。我下意识的将exec里面的执行语句改成了

"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,成功将我们的代码执行了。

PS:IIS+Windows 不亏是一个黑洞。

py加PHP,浅谈PHP运行Python脚本的方法相关推荐

  1. abaqus python_Abaqus运行Python脚本的方法—转载

    1 概述 Abaqus 软件二次开发环境提供的脚本结构就是基于Python语言进行的定制开发.在Abaqus/CAE中进行的所有操作,都有对应的命令,这些命令是用Python语言编写的.如果接触过AN ...

  2. cmd命令行怎样运行python_在CMD命令行中运行python脚本的方法

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. 怎么在命令行里运行python脚本 (合集)

        在命令行里运行python脚本的方法 工具/原料 python;CMD命令行;windows操作系统 方法/步骤 首先下载安装python,建议安装2.7版本以上,3.0版本以下,由于3.0版 ...

  4. 浅谈λ演算与Python的lambda函数

    快速浏览 浅谈λ演算与Python中的lambda函数 λ演算 初识λ演算 λ演算的句法结构 两个特征 写lambda项的三个(递归的)规则 等价变换lambda项的三个法则 α-等价 β-归约 η- ...

  5. 命令行运行Python脚本时传入参数的三种方式

    三种常用的方式 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. python script.py 0,1,2 10 python script ...

  6. python路径在哪里设置_找Python安装目录,设置环境路径以及在命令行运行python脚本实例...

    第一点:找Python安装目录 方法一: 方法二: 输入import sys print(sys.path) 化黑线处 第二点:找到安装目录后就可以开始设置环境变量 这里我的安装目录为C:\Progr ...

  7. python-找Python安装目录,设置环境路径以及在命令行运行python脚本

    第一点:找Python安装目录 方法一: 方法二: 输入import sys print(sys.path) 化黑线处 第二点:找到安装目录后就可以开始设置环境变量 这里我的安装目录为C:\Progr ...

  8. centos 自动运行python脚本,centos配置 Python 定时任务

    centos 实现自动运行 Python 脚本 正式配置前,先编写一段 Python 脚本,实现日志写入文件操作 import os import sys import loggingcurrent_ ...

  9. 关于群晖NAS计划运行Python脚本的笔记

    群晖NAS安装python3及模块 用NAS计划运行python脚本 学习Python时,编了一个小脚本用来每天上几个特定网址,更新数据并用邮件发过来. 由于没有服务器,就用NAS设置计划任务来实现. ...

  10. Linux定时运行Python脚本

    Linux–CentOS定时运行Python脚本 最近公司的项目开始进入运营阶段,数据库的记录也开始多了起来.看了postgresql的自动清理好像不太符合需求,暂定对接口请求记录表保留3个月内的记录 ...

最新文章

  1. fiddler无法抓取chrome浏览器请求的解决方案之关闭代理软件
  2. BNF范式(巴科斯范式)简介
  3. Linux 发行版与Linux内核
  4. python 判断是否是int/string/类型的函数
  5. 专访.NET平台上类RoR开源项目Castle[转载]
  6. day 96 关于分页的使用
  7. linux脚本批量复制文件,shell实现scp批量下发文件
  8. IntelliJ IDEA for Mac 如何在当前的普通Java项目中创建新的模块/添加模块/创建模块
  9. 更新了一个新版本的editplus 语法文件(for nagios)
  10. Node.js 得到当前目录下文件修改文件名
  11. 假如一个程序员有社交牛逼症
  12. mysql下载64位 linux_在linux(CentOS-6.7_x86_64)上安装mysql成功记录
  13. usermod使用方法
  14. 【Vue】—Vue脚手架创建项目时的 linter / formatter config配置选择
  15. 从 0 经验到成为全球第一模组生产商,日海智能的「非典型」物联网之路
  16. 小精灵无尽的长廊_绝顶高手的养成日常
  17. 个人职场工作感悟总结「如何尽快地提升自我」
  18. 生成对抗网络训练_生成对抗网络
  19. java 背单词系统_快速高效背单词系统方法论
  20. Linux I2C总线详解

热门文章

  1. poj 3074(DLX)
  2. 实战篇-六十六行完成简洁的Rss输出类
  3. 动态引入js文件和css样式表文件
  4. Windows Server 2012 2R服务器版本域控制器的安装及域环境的搭建(内有镜像下载)...
  5. SurfaceView + MediaPlayer 实现列表循环播放视频
  6. A network analyzer is used for
  7. 频繁项集挖掘算法之FPGrowth
  8. 安装kali之后那些事儿
  9. Net-SNMPv3的使用
  10. Linux 设备驱动的固件加载-转载