Виртуальная среда Python - PHP Exec Command не работает - PullRequest
0 голосов
/ 13 июня 2019

Мне нужно вызвать Python из PHP в Ubuntu. Я делаю это так:

$command = 'usr/bin/python3.6 /var/www/vhosts/domain.com/python/test.py';
exec($command, $output, $r);

Однако, когда я создаю виртуальную среду и делаю то же самое, команда вообще не работает:

$command = '/root/venv/bin/python3.6 /var/www/vhosts/domain.com/python/test.py';
exec($command, $output, $r);

Venv и оригинальный питон одинаковы. Файл python test.py chmod-ed для 777.

Когда я выполняю:

/root/venv/bin/python3.6 /var/www/vhosts/domain.com/python/test.py

из команды like (терминал) - работает без проблем. Так что я думаю, это как-то связано с активацией среды.

Как вы думаете, в чем проблема?

Или как я могу отладить его, не уверен, где я могу найти файлы журнала для python. Я не вижу ошибок для php.

1 Ответ

0 голосов
/ 25 июня 2019

Вот что я использую как для crontabs, так и для вызова файла .py через PHP shell_exce () или exec (). Я не эксперт, но я достаточно долго шарила, чтобы все заработало.

$exec_str = "cd /home/dockethound/public_html/layout/pydocx && /home/flohosting/PythonTest/PythonTest/bin/python create-docx.py \"".$GET['email']."\" \"".$GET['doc_id']."\" >2&1";
exec($exec_str);

Я использую GoDaddy VPS с некоторыми установленными модулями Python (python-docx).

Мое понимание этой команды заключается в том, что она перейдет в каталог, в котором находится скрипт (хотя я тогда вызываю его по абсолютному пути на сервере, который кажется ненужным), а затем вызываю мой virtualenv для python3 +0,6. Я установил его в PythonTest, и он работает, поэтому я никогда не менял его.

О, && было очень важно. Я имел это в crontab, но не в моей команде shell_exec (), и это не работало. Я снова проверил свой crontab, увидел его там и добавил, и BOOM, мой shell_exec () / exec () начал работать.

Надеюсь, это поможет

PS - переменные в конце передают аргументы (или параметры) в скрипт. Я использую следующее для доступа к ним:

import sys
#declare the variable
var_1 = sys.argv[1]
var_2 = sys.argv[2]

argv [0] всегда является первой частью скрипта, то есть от cd до имени скрипта.

...