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

如何从Node.js传递图片路径给Python脚本并完成图片处理后回传

问题根源

  • Image.open() 本身支持直接传入文件路径字符串,不需要额外嵌套 open() 生成文件对象;即使传入文件对象,未手动关闭会导致文件句柄泄漏、文件占用,触发运行异常
  • 原代码未捕获异常、也未监听Python进程的错误输出,无法定位具体报错原因(比如路径含特殊字符、Pillow依赖缺失、文件权限不足等都会导致运行失败)

修复后代码

Node.js 端

新增错误输出监听,可直接查看Python运行时的报错信息

const spawn = require('child_process').spawn;
function filepath(file1, file2) {
    // Windows环境如果python命令不生效,可以替换为python3或者你的Python完整安装路径
    const python = spawn("python", ["test.py", file1, file2]);

    // 监听Python正常返回结果
    python.stdout.on('data', function (data) {
        const result = data.toString();
        console.log("处理成功:", result);
    });

    // 监听Python运行报错
    python.stderr.on('data', function (error) {
        console.error("处理失败:", error.toString());
    });

    // 监听进程退出状态
    python.on('close', function (code) {
        console.log("Python进程退出,退出码:", code);
    });
}

filepath(req.files[0].path, req.files[1].path);

Python 端

修复图片打开写法,新增图片复制、重命名、结果回传逻辑

import sys
import shutil
from PIL import Image

filepath1 = sys.argv[1]
filepath2 = sys.argv[2]

try:
    # 直接传入路径打开图片,不需要嵌套open
    img = Image.open(filepath1)
    # 验证图片合法性,避免损坏文件导致后续操作失败
    img.verify()
    img.close()

    # 自定义复制重命名规则,示例:将第一张图片复制到当前目录,重命名为processed_img.jpg
    new_save_path = "./processed_img.jpg"
    shutil.copy2(filepath1, new_save_path)

    # 回传结果给Node.js,多结果可转为JSON字符串返回
    print(new_save_path)
except Exception as e:
    # 将错误输出到stderr,方便Node.js捕获
    print(str(e), file=sys.stderr)
finally:
    sys.stdout.flush()

注意事项

  • 先确认Python环境已安装Pillow依赖:执行pip install pillow安装即可
  • 若文件路径包含中文、空格,确保Node.js和Python的运行环境编码统一为UTF-8
  • 自定义命名规则时,注意路径的读写权限,避免权限不足导致复制失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:24:02