这篇文章主要介绍PHP如何运行Python脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
在鄂温克等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、成都网站设计 网站设计制作定制制作,公司网站建设,企业网站建设,成都品牌网站建设,成都营销网站建设,外贸营销网站建设,鄂温克网站建设费用合理。
注:本次问题产生的环境是建议在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 不亏是一个黑洞。
以上是“PHP如何运行Python脚本”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!