You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows CMD环境下PHP调用运行Python脚本失败怎么解决

PHP调用Python脚本无响应无输出解决方案
  • 补全所有路径为绝对路径
    你当前代码存在两个路径缺失问题:

    1. scandir仅返回文件名,你赋值给$f1、$f2的只有文件名没有父级目录路径,Python运行时无法找到对应文件,需要补全完整路径:
    $f1 = $upload_dir . DIRECTORY_SEPARATOR . $result[0];
    $f2 = $upload_dir . DIRECTORY_SEPARATOR . $result[1];
    
    1. 命令中的python、main.py也要使用绝对路径,避免PHP运行时工作目录和预期不一致导致找不到文件,比如/usr/bin/python3、/var/www/project/main.py。
  • 捕获错误输出排查问题
    你之前的调用仅捕获了标准输出,Python运行的错误信息会输出到标准错误流,默认不会被exec/shell_exec捕获,添加2>&1将错误输出重定向到标准输出,同时打印返回状态码确认执行结果:

    // 所有参数用escapeshellarg转义,避免文件名含特殊字符导致命令解析错误
    $cmd = sprintf(
        "%s %s %s %s 2>&1",
        escapeshellarg('/usr/bin/python3'), // 替换为你的Python绝对路径
        escapeshellarg('/full/path/to/main.py'), // 替换为main.py的绝对路径
        escapeshellarg($f1),
        escapeshellarg($f2)
    );
    exec($cmd, $output, $return_code);
    // 打印排查信息
    var_dump($cmd); // 确认拼接的命令是否正确
    var_dump($return_code); // 返回0为执行成功,非0为执行失败
    var_dump($output); // 包含所有标准输出和错误输出
    
  • 检查权限配置
    运行PHP的用户(如web场景下的www-data、apache用户)需要拥有以下权限,可手动切换到对应用户执行拼接好的命令验证:

    • Python解释器的执行权限
    • main.py的读取权限
    • $f1、$f2两个文件的读取权限
    • 若Python脚本有写入操作,还需要对应目录的写入权限
  • 适配PHP运行环境变量
    web场景下PHP运行的环境变量和命令行CLI环境不同,若Python脚本依赖第三方库,需要确保PHP运行用户的环境变量能找到对应依赖,或者在命令中指定虚拟环境的Python解释器路径。

内容的提问来源于stack exchange,提问作者Suresh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:54:04