Python虚拟环境-PHP Exec命令不起作用

时间:2019-06-12 22:49:30

标签: php python ubuntu virtualenv exec

我必须在Ubuntu中从PHP调用python。我这样做是这样的:

$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是相同的。 python文件test.py更改为777。

执行时:

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

来自(终端)之类的命令-它可以正常工作。所以我想这与激活环境有关。

您认为问题可能是什么?

或者我该如何调试它,不确定在哪里可以找到python的日志文件。我没有看到php的任何错误。

1 个答案:

答案 0 :(得分:0)

这是我用于crontab和通过PHP shell_exce()或exec()调用.py文件的功能。我不是专家,但是我摸索了足够长的时间才能使工作正常。

$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)。

我对该命令的理解是,将其CD到脚本所在的目录(即使我随后从服务器上的绝对路径调用它,这似乎是不必要的),然后调用我的virtualenv对于python3.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到脚本的名称。