WordPress插件调用Python脚本时shell_exec返回null的排查求助
解决WordPress插件中shell_exec调用Python脚本返回null的问题
脚本存放位置说明
脚本放在插件目录是合理选择,数据库不适合存储可执行脚本,继续保留在插件文件夹内即可,重点要确保文件权限与路径正确。
排查与修复方案
1. 校验命令路径与文件权限
- 确认
python3的绝对路径:本地环境中python3的路径可能不是全局可直接调用的,在终端执行which python3(Linux/macOS)或where python3(Windows)获取完整路径,替换代码中的python3。 - 给
transcribe.py设置正确权限:确保PHP运行用户(通常是www-data、nginx或apache)拥有读和执行权限,执行命令:chmod 755 /你的插件目录路径/transcribe.py。
2. 捕获错误输出排查问题
shell_exec仅返回标准输出,错误信息会被隐藏,修改命令将错误重定向到标准输出,便于调试:
$command = escapeshellcmd("python3 " . plugin_dir_path(__FILE__) . "transcribe.py " . escapeshellarg($file_path) . " 2>&1"); $output = shell_exec($command); // 临时输出调试信息,排查后可删除 var_dump($output); wp_die();
通过输出内容可以直接看到Python脚本执行时的错误,比如依赖缺失、文件找不到、权限不足等具体问题。
3. 验证路径拼接正确性
检查plugin_dir_path(__FILE__)的输出是否带末尾斜杠,避免拼接后出现/plugins/myplugintranscribe.py这类缺少分隔符的错误,可临时添加代码确认路径:
var_dump(plugin_dir_path(__FILE__));
4. 测试Python脚本独立运行能力
直接在终端手动执行拼接后的完整命令,比如:
python3 /你的插件目录路径/transcribe.py "/目标音频文件路径.mp3"
如果手动执行也失败,优先修复Python脚本本身问题,比如安装缺失的依赖包、修正脚本逻辑错误。
5. 检查PHP环境限制
即使shell_exec未被禁用,部分环境可能开启了open_basedir限制,导致PHP无法访问Python路径或脚本路径,可查看php.ini中的open_basedir配置,必要时添加允许访问的路径。
内容的提问来源于stack exchange,提问作者Kade
相关产品推荐
相关产品推荐

