php - 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 错误。
解决方案
这是我用于 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 virtualenv
for 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
到脚本的名称。
推荐阅读
- node.js - WebStorm 已将目录中的所有文件标记为非项目文件
- mongodb - how to set a new property on existing records in mongoDB atlas
- python-3.x - 如何读取/读取包含具有完全不同模式的文件的目录
- scala - 线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/log4j/or/RendererMap
- python - 将包含 Python 代码(由 reticulate 启用)的 Rmarkdown 文件部署到 shinyapp.io
- javascript - 如何在角度输入时添加动作
- javascript - 非常断断续续 -- DataTables 警告:table id=... - 无效的 JSON 响应
- android - PreferenceFragmentCompat & 工具栏问题
- google-sheets - 如何将数字转换为字母
- java - “以下类的超类型无法解析。” 在任务:应用程序:buildInfoGeneratorDebug