首页 > 解决方案 > Python 虚拟环境 - PHP 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 错误。

标签: phppythonubuntuvirtualenvexec

解决方案


这是我用于 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);

我正在使用安装了一些 Python 模块(python-docx)的 GoDaddy VPS。

我对命令的理解是它 cd 到脚本所在的目录(即使我随后从服务器上的绝对路径调用它,这似乎没有必要),然后调用 my virtualenvfor 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到脚本的名称。


推荐阅读