【发布时间】:2017-03-12 17:03:56
【问题描述】:
我有一个 index.php 文件,它运行如下 python 脚本:
shell_exec("/usr/custom/test.py")
test.py 文件尝试写入文件(目录中默认不存在)如下:
#!/usr/bin/env python
import io
with io.FileIO("foobar.txt, "w") as file:
file.write("Hello!")
现在,如果我在 Ubuntu 中直接以 root 身份运行此文件,它可以正常工作。该文件已创建并具有“你好!”里面。
如果我通过 php 脚本运行它(通过访问我的 index.php 页面),我会在 /var/log/apache2/error.log 中收到以下错误
Traceback (most recent call last):
File "/usr/custom/test.py", line 5, in <module>
with io.FileIO("foobar.txt", "w") as file:
IOError: [Errno 13] Permission denied: 'foobar.txt'
现在...我尝试了另一个 python 文件,它只打印了一些东西,我能够让它运行良好。所以这就是我感到困惑的地方。
文件夹和test.py文件的权限相同,如下:
-rwxrwxrwx 1 www-data www-data 102
我不明白为什么这不会让我写入文件。我什至尝试先创建文件(触摸),然后授予它权限……但它没有用。
有人知道我怎样才能让它工作吗?
【问题讨论】:
-
尝试在python中获取文件路径以检查它是否正常工作:在php文件所在的文件夹中创建一些文件,然后在python脚本中写入
import os和print(os.path.abspath("filename.txt"))- 什么是输出? -
使用
$output = shell_exec("/usr/custom/test.py");,然后打印该输出以查看python脚本的结果。 -
艾敏,我不完全确定我明白你要我做什么。所以我将 import os 和 print(os.path.abspath("filename.txt")) 添加到我的 python test.py 脚本中。我还在与我的 index.php 文件(位于 /var/www/html 中)相同的文件夹中创建了 filename.txt。因此,如果我直接以 root 身份运行我的 python 脚本,它会显示 /var/www/html/filename.txt 至于你的第二条评论,我有 $output = shell_exec("/usr/custom/test.py");打印($输出);但是当我导航到 index.php 文件时,我的网页上没有输出。我也没有在 apache 日志文件中看到任何内容。
-
我之所以要求在没有完整路径的情况下添加该行是为了检查 python 尝试创建文件的位置。如果如您所说,它检查
/usr/custom/文件夹,那么这意味着它将尝试在该目录中创建foobar.txt。尝试在打开文件时为foobar.txt提供完整路径。此外,最好使用with open('/path/to/foobar.txt', 'w') as file而不是io。 -
另外,当你以 root 执行 python 脚本时,确保它没有创建文件
foobar.txt。如果它创建了该文件,由于 root 用户,该文件将需要 root 访问权限才能重写。在这种情况下,删除当前的foobar.txt文件。
标签: php python apache ubuntu-16.04