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

NodeJS使用Python-Shell.run无法获取Python脚本STDOUT输出求助

解决Node.js通过python-shell调用Python脚本时参数传递与输出获取的问题

嘿,我明白你现在的困扰了——用python-shell的时候,on和end方法能拿到Python的打印输出,但没法传参数;换成run方法能传参数,却拿不到本该返回的内容。其实问题出在你设置的mode: 'JSON'和Python输出格式不匹配上,我给你两种解决方案:

方案一:使用文本模式(简单场景首选)

你设置了mode: 'JSON',这时候python-shell会强制要求Python输出合法的JSON字符串,否则它没法解析,自然拿不到结果。如果只是传递简单字符串参数、获取普通打印输出,直接去掉JSON模式就行:

修改后的Node.js代码

var pythonShell = require('python-shell');
app.post('/index/generator/', urlencodedParser, function (req, res){
  var options = {
    pythonOptions: ['-u'], // 这个参数很关键,关闭Python输出缓冲,确保实时获取内容
    scriptPath: './generator',
    args: ['hello','bye']
  };
  pythonShell.run('generator.py', options, function (err, results) {
    if (err) throw err;
    // results是Python输出的每一行组成的数组,这里直接拼接成字符串
    console.log("Message: ", results.join('')); 
  });
})

Python代码无需修改

你的Python脚本已经正确读取参数并打印了,保持原样就行:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
print(sys.argv[1]+' '+sys.argv[2])

方案二:使用JSON模式(适合复杂数据交互)

如果需要在Node.js和Python之间传递复杂数据(比如对象、数组),那可以继续用JSON模式,但要让Python输出合法的JSON字符串:

修改后的Python代码

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import json

# 构造JSON格式的输出内容
output_data = {
    'combined_message': sys.argv[1] + ' ' + sys.argv[2]
}
# 打印JSON字符串(必须确保输出是合法JSON,不能有多余的打印内容)
print(json.dumps(output_data))

Node.js代码保持JSON模式

var pythonShell = require('python-shell');
app.post('/index/generator/', urlencodedParser, function (req, res){
  var options = {
    mode: 'JSON',
    pythonOptions: ['-u'],
    scriptPath: './generator',
    args: ['hello','bye']
  };
  pythonShell.run('generator.py', options, function (err, results) {
    if (err) throw err;
    // results[0]就是解析后的JSON对象
    console.log("Message: ", results[0].combined_message); 
  });
})

补充说明:pythonOptions: ['-u']一定要加上,它会关闭Python的输出缓冲,避免Node.js无法及时获取到Python的打印内容,尤其是在脚本输出较多的时候。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:56:11