【发布时间】:2014-03-02 04:09:07
【问题描述】:
我有一个调用 python 脚本的 php 脚本,该脚本又负责将一些文件写入磁盘。
如果我通过在 Web 浏览器中输入其 url 来执行 php 脚本,它可以执行几个与文件系统相关的任务:
- 可以创建目录
- 它可以修改目录
但它无法执行会创建和写入其他文件的 python 脚本。
奇怪的是,如果我手动运行 python 脚本为www-data:
user@host $ sudo su www-data
passwd for sudo:
$ whoami
www-data
$ python my_script.py
它就像一个魅力。
我假设通过浏览器运行脚本时的用户是www-data。那么为什么控制台中的结果有什么不同呢?
已解决:
Python 脚本首先从我的存储库中导入一些模块,这些模块通过登录控制台上的.bashrc 或.bash_profile 附加到路径中。用户www-data 无法从浏览器获得这些模块。所以将它添加到 python 脚本中解决了它:
import sys
sys.path.insert(0, 'path_to_my_modules')
解决了。
我为这个问题道歉。它没有为用户带来解决方案所需的所有必要信息。我想这个问题太广泛了,以至于我很难开始思考它的根源在哪里。
我缺乏一种很好的调试技术来查看错误是什么。我注释掉了所有的 python 脚本并从一个简单的print 'here' 开始。逐行取消注释向我展示了它不再打印任何内容的地方(当时错误很明显)。
【问题讨论】:
-
从你的信息中不清楚,如果.py脚本是从apache调用的,你能在apache日志中找到与脚本相关的错误吗?如果您没有发现错误,请尝试在 .py 脚本中添加一些基本命令(对网页进行回显测试)以检查它是否已执行。
-
在php脚本里面有一行
exec($cmd, $output, $status);命令是python脚本。我可以将命令回显到浏览器,将其复制粘贴到我是 www-data 的控制台中,然后它就会运行。然而,在浏览器中我得到退出状态 1 -
我的意思是 .py 脚本中的示例命令,而不是 php 中的命令。状态 1 - 通常意味着 - 一些错误异常。
-
能贴出相关的PHP代码吗?
-
对不起,我一直在忙于解决办公室更紧急的问题,我稍后或明天会回来。 Tankyou 为您提供帮助。
标签: php python linux apache ubuntu-10.04