【问题标题】:php script to execute python script to write some filesphp脚本执行python脚本写入一些文件
【发布时间】: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


【解决方案1】:

首先,不要假设用户是www-data。您应该从 PHP 脚本运行的whoami 获取输出,以查看它是否为www-data。此外,您需要确保您的脚本具有+x 或用户的执行权限。

你应该read about execute permissions

您需要在 PHP 脚本上使用 chown 将所有权更改为 www-data 用户:

sudo chown www-data:www-data yourscript.php

那么你需要给用户执行权限:

sudo chmod u+x yourscript.php

【讨论】:

  • 我从浏览器执行了 whoami,我确认用户是 www-data。无论如何,我的问题更多是关于控制台和浏览器结果之间的区别
  • 您能解释一下“就像您在控制台中一样以 root 身份”是什么意思吗?我以为我是控制台中的 www-data 。谢谢!
  • @MarcosModenesi 我的错误。您实际上并未以 root 身份运行。您使用了su,这意味着您切换到以www-data 用户身份运行。但是,由于您使用sudo 进行了身份验证,您的终端将允许您在一段时间内执行超级用户操作,而无需要求您重新进行身份验证。
  • 这是有道理的。我会等一会儿,看看我是否失去了执行该 python 脚本的能力
  • 那么,这些权限没有帮助吗?您可能还想重新启动 Apache:sudo /etc/init.d/apache2 restart。此外,您不会失去执行 Python 脚本的能力。该脚本将无法执行任何需要超级用户权限的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
  • 2018-01-25
相关资源
最近更新 更多