nginx上 使用 php 调用python 的问题

nginx服务器是一款轻量级的服务器,目前应用的比较广泛。我之前一直都是使用Windows+Apache的服务器配置进行相关的开发,这次主要还是想挑战一下LNMP的开发环境。

这次本来以为是一个简单的php调用python程序,但是却遇到了不少问题。首先就是Linux操作系统的不熟悉(算是一个小白)通过SSH客户端登陆后就看到命令行就完全摸不着了,只能硬着头皮恶补了一些Linux下的一些基本命令,现在觉得这些都是一些程序员的基本功了,看来还是需要多努力呀!

下面就来讲讲php调用python程序:

php内置了四个调用外部程序的函数 system 、exec、passthru、popen。每个函数的详细用法这里就不说了,可以参考PHP 手册或者PHP调用外部程序的方法。我要调用的python程序是一个爬虫程序,耗时也比较长。这里对比后决定使用exec函数。一开始的时候通过exec执行shell命令,通过shell命令来调用python程序。但是使用的是:

string exec ( string command [, array &output [, int &return_var]] )格式来运行。结果流浪器上一片空白,后台证实python程序没有被调用。但是也不报错误,这让我很头疼,查了nginx错误日志也没有用的信息。后来通过百度终于得到了可以看到调用shell命令执行结果的方法:在所用命令后面加入  2>&1

exec("python test.py 2>&1",$rec,$res);
print_r($rec);
这样就可以在第二个参数中返回错误的结果了.多亏了这样才让我的调试有了更进一步的进展。

接下来遇到的问题就不是code的问题了,而是nginx服务器的问题了。第一就是PATH的问题,要调用python程序要配置好python的环境变量这大家都知道,但是由于不熟悉Linux服务器,我也是绕了很长的路。Linux是多用户的一个系统,不同的用户可以单独有各自的shell运行环境和PATH,由于一开始是使用root登录Linux系统,在root里面设置了环境变量,加入了python的环境。在终端中运行python程序一点问题都没有,但是在浏览器上显示:

sh:python command not found

这个问题百度了大都是在nginx首次配置python环境时的问题,也就是不涉及浏览器调用python时的环境了。后来也是通过Google(不得不说Google确实比百度强大了许多)才知道nginx用户的环境变量与root的不一定是一样的。于是便测试了一下:

su - nginx
echo $PATH

果然nginx在Linux的PATH与root的PATH不同,于是立马在nginx用户下添加python的环境变量。添加环境变量的方法有很多,大家可以百度一下,我是参考了http://blog.csdn.net/h70614959/article/details/9088595 修改的,改的是  /etc/profile  虽然说是在这个地方修改对于任何的用户都是有效的,但是我的没有(不知道是不是什么地方没弄对)后来手动在nginx用户的环境里添加了python的变量,这时以为万事ok了,但是没想到还是:

sh:python command not found

google了一下找到解决的方法是在调用python前 自己再添加一次变量 使用的是putenv函数,虽然没有再报 command not found 了,但是仍然好奇,为什么在系统设置的PATH没有起作用。(这也是一开始的盲点,如果早有觉察,也就省了许多步骤)后来在php文件里面

exec("env 2>$1",$rec ,$res);
print_r($rec);
发现输出来的变量根本没有PATH,也就是说没有环境变量!!!!!!

虽然很震惊,但是Google一下也没有找到原因。

总结一下linux 下不同用户的shell环境、环境变量可能不一样。通过外部程序调用时候根据使用的程序不同shell环境和环境变量也会不一样。这些权当做自己学习开始的一点经验!



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮尔菲特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值