-1

我想从 PHP (LAMP) 运行 Python 脚本。该脚本导入astropy,由于某种原因我无法成功地做到这一点。我可以使用下面复制的示例文件重现基本问题。我认为这不是权限或 Python 路径问题。例如,我可以导入 numpy、scipy 等。我还可以创建一个 Python 脚本来读取和写入同一目录 (/www/var) 上的文件。我在 /usr/bin/python 上有标准的 Python,还有 Anaconda 版本。两者都有astropy,无论我使用哪一个,我都会遇到同样的问题。

我怀疑这是关于以我自己(工作正常)或 www-data(来自网络浏览器)的身份运行代码。但是,当我从 Linux 终端执行此操作时:sudo -u www-data php test.php,代码按预期工作。

这是test.php:

<?php

echo "<p>begin test.php</p>";
system("python test.py");
echo "<p>end test.php</p>";

?>

和test.py:

print("this is test.py ...")

import sys, numpy, scipy, matplotlib
print("passed the import sys, numpy, scipy, matplotlib ...")

import astropy
print("passed the import astropy ...")

当我打开 test.php 时,我得到的是:

begin test.php
this is test.py ... passed the import sys, numpy, scipy, matplotlib ... ERROR: TypeError: coercing to Unicode: need string or buffer, NoneType found [genericpath]

end test.php
4

1 回答 1

1

你运行的是什么版本的 Astropy?顺便说一句,我很确定这是一个已知且已解决的问题:https ://github.com/astropy/astropy/pull/952

此外,当前版本的 Astropy 要求您指定库可以写入的配置目录。它不一定知道 /var/www 是用于网络服务器的正确“主”目录,因此您需要设置环境变量XDG_CONFIG_HOME=/var/www(确保该/var/www/astropy目录也存在)。

我认为有计划简化这一点,以便库至少可以在没有额外设置的情况下导入。

于 2013-09-09T20:29:49.460 回答