我想从 php 执行 python,我确实有一个脚本可以很好地用于默认的 python 解释器。我有默认的python 2.6.6的centos,它安装在/usr/bin/python和python 2.7.3,安装在/usr/local/bin/python2.7。你可以看到默认的python版本是什么:
[root@me ~]# python -V
Python 2.6.6
[root@me ~]# python2.7 -V
Python 2.7.3
现在我想从 php 调用一个简单的 python 脚本。它应该在python 2.7.3中执行,而不是在python 2.6.6中执行。但我只设法使用默认版本的 python 来做到这一点。
PHP(test.php):
<?php
ini_set('display_errors', 'on');
$output = array();
$dir = dirname(__FILE__);
$command = "/usr/bin/python ". $dir . "/test.py";
$command1 = "/usr/local/lib/python2.7/ ". $dir . "/test.py";
$output = null;
exec($command, $output);
var_dump($output);
?>
蟒蛇(test.py):
#!/usr/bin/env/python2.7
import sys
print(sys.version)
输出(一旦我在浏览器中运行测试.php):
array(2) { [0]=> string(41) "2.6.6 (r266:84292, Jan 22 2014, 09:42:36)" [1]=>
string(38) "[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)]" }
所以当我使用:
exec($command, $output);
一切都很好,它显示了正确的 Python 版本 (2.6.6)
但是当我运行测试时.php使用:
exec($command1, $output);
我得到这些结果(没有结果):
array(0) { }
因此没有结果,所以我想知道 python 是否看到安装 2.7.3
从命令行 2.7.3 可用 - 例如:
[root@me ~]# python2.7
Python 2.7.3 (default, Jan 2 2015, 00:56:13)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "it works"
it works
那么我该如何解决这个问题呢?
编辑:
The result of whereis -b python :python:
/usr/bin/python /usr/bin/python2.6 /usr/lib/python2.6 /usr/lib64/python2.6
/usr/local/bin/python2.7-config /usr/local/bin/python2.7 /usr/local/lib/python2.7
/usr/include/python2.6
-
您的
test.py
文件中存在错误。在终端中执行文件将显示以下输出:bash: ./test.py: /usr/bin/env/python2.7: bad interpreter: Not a directory
若要解决此问题,请将第一行设置为:
#!/usr/bin/env python2.7
请注意
env
和python2.7
之间的空格。 -
您可以通过执行
/usr/bin/python
而不是运行脚本本身来覆盖文件中设置的 Python 解释器。 您应该按如下方式执行 Python 脚本:ini_set('display_errors', 'on'); $output = array(); $command = dirname(__FILE__) . "/test.py"; exec($command, $output); var_dump($output);
注意:请记住在 Python 文件上设置执行位:
chmod +x test.py