从Node.js调用含transformers的Python脚本无报错但无法运行
解决Node.js调用Python Transformers库无输出问题
先捕获隐藏的错误
你目前只监听了Python子进程的标准输出,完全没处理错误输出——导入transformers后程序失效,大概率是Python端抛出了错误但你没看到。先修改Node代码,加上错误输出和进程退出的监听:
const spawn = require("child_process").spawn; const pythonProcess = spawn('python',["./SentAnalysis.py", JSON.stringify(reviewsArray)]); pythonProcess.stdout.on('data', (data) => { console.log(data.toString()) }); // 新增:捕获Python的错误输出 pythonProcess.stderr.on('data', (data) => { console.error('Python报错:', data.toString()); }); // 新增:监听进程退出状态 pythonProcess.on('close', (code) => { console.log('Python进程退出,状态码:', code); });
修复Python代码的参数解析逻辑
你手动用strip('][').split(', ')解析JSON数组的方式漏洞极大——如果字符串里包含逗号或引号,直接会导致解析错误。应该用json.loads正确解析传入的JSON参数;另外print(''.join(results))也有问题,results是字典列表,直接拼接会报错,得转成JSON字符串输出:
from transformers import pipeline import json import sys # 正确解析传入的JSON格式参数 reviewsArray = json.loads(sys.argv[1]) sentiment_pipeline = pipeline("sentiment-analysis") results = sentiment_pipeline(reviewsArray) # 将结果转为JSON字符串输出,方便Node端解析 print(json.dumps(results)) sys.stdout.flush()
先单独验证Python脚本
别先和Node联动测试,直接在命令行运行Python脚本,确认它能正常工作:
python SentAnalysis.py '["I love this product", "This is terrible"]'
如果这一步卡住或报错,就是Python环境的问题:
- 检查transformers是否正确安装:执行
pip install transformers,建议用虚拟环境避免版本冲突 - 第一次运行
pipeline会自动下载模型,若网络受限需手动下载模型到指定路径 - 确认Python版本符合transformers要求(一般需3.7及以上)
排查Python路径匹配问题
有时候命令行里的python和Node调用的python不是同一个环境(比如你在虚拟环境装了transformers,但Node调用的是系统默认Python)。可以换成Python的绝对路径,比如:
// 示例:Linux/macOS路径 const pythonProcess = spawn('/usr/bin/python3',["./SentAnalysis.py", JSON.stringify(reviewsArray)]); // 示例:Windows路径 // const pythonProcess = spawn('C:\\Python39\\python.exe',["./SentAnalysis.py", JSON.stringify(reviewsArray)]);
内容的提问来源于stack exchange,提问作者Giannhs Ker
相关产品推荐
相关产品推荐

