从PHP中的系统函数调用特定的Python版本


Calling a specific Python version from system function in PHP

在我的问题的根源,我试图从PHP脚本内部调用Python脚本。我在一个共享服务器上,安装了多个版本的Python:

/usr/bin/python -V ... 2.6
/home/tony/python/python -V ... 2.7
/home/tony/python/Python-3.2/python ... 3.2
echo $PATH ... /home2/tony/python/Python-3.2/
echo $PYTHONPATH... /home2/tony/python/lib/python3.2/site-packages

我还在Unix中做了一个别名:

alias python3='/home2/tony/python/Python-3.2/python'
以下是Python脚本(test.py)的内容:
#!/usr/bin/python
import sys
print 'Python version:', sys.version_info
下面是PHP脚本(test.php)的内容:
<?php
$py_script = "test.py";
$py_args = "name1=value1++name2=value2";
system('python ' . $py_script . ' ' . $py_args, $retval);
// $retval will have a trailing 0 or 1 at the end
$retval = trim($retval, "0 1");
echo $retval;
?>

但是当我在浏览器中点击test.php时,我看到的仍然是2.6版本。我不知道我的脚本的哪一部分我必须改变强制使用上面的Python 3.2(我需要3.2中的功能/模块,2.6无法处理)。任何帮助将不胜感激!

您可以使用您的别名作为web服务器运行的用户(通常是debian或ubuntu的www-data)

 alias python3='/home2/tony/python/Python-3.2/python'

更改PHP

<?php
$py_script = "test.py";
$py_args = "name1=value1++name2=value2";
system('/home/tony/python/Python-3.2/python ' . $py_script . ' ' . $py_args, $retval);
// $retval will have a trailing 0 or 1 at the end
$retval = trim($retval, "0 1");
echo $retval;
?>