Я хочу выполнить Python из PHP, и у меня есть скрипт, который отлично работает для интерпретатора Python по умолчанию. У меня есть Centos с Python 2.6.6 по умолчанию, который установлен в / 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
Теперь я хочу вызвать простой скрипт на python из php. Это должно быть выполнено в 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);
?>
Python (test.py):
#!/usr/bin/env/python2.7
import sys
print(sys.version)
ВЫХОД (после запуска test.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)
Однако, когда я запускаю test.php с:
exec($command1, $output);
Я получаю эти результаты (без результатов):
array(0) { }
Поэтому результатов нет, поэтому мне интересно, видит ли питон вообще установку 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
,
Вы переопределяете интерпретатор Python, установленный в файле, выполнив /usr/bin/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
Других решений пока нет …