Выполнение Python из PHP - Выбор версии Python (Linux - CentOS)

0

Я хочу выполнить 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)

OUTPUT (после запуска 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) { }

Поэтому результатов нет, поэтому я задаюсь вопросом, видит ли 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
  • 0
    Это может быть более независимым от платформы, чтобы проверять записи из- whereis -b python для правильной версии (может потребоваться некоторая эвристика). Еще лучше, конечно, сделать ваш скрипт совместимым со всеми современными версиями (такими как 2.7 + 3.2 и выше).
  • 0
    Результат где -is 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
Теги:
python-2.7
centos

1 ответ

1
  1. В файле test.py есть ошибка. Выполнение файла в терминале показывает следующий вывод:

    bash: ./test.py: /usr/bin/env/python2.7: bad interpreter: Not a directory
    

    Чтобы исправить это, установите первую строку:

    #!/usr/bin/env python2.7
    

    Обратите внимание на пространство между env и python2.7.

  2. Вы переопределите интерпретатор 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
    
  • 0
    Я добавил это, и я все еще получаю ошибку. На самом деле строка #! / Usr / bin / env не имеет значения.
  • 0
    Вы вызывали файл с php?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню