如何从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
相关产品推荐
相关产品推荐

