NodeJS stdout python多次打印?

时间:2017-06-22 02:45:44

标签: python node.js

我有一个打印JSON和字符串的python脚本:

# script.py
print('{"name": "bob", "height": 4, "weight": 145}')
print('hello')
sys.stdout.flush()

nodejs app通过child-process调用python脚本。但是我输出错误了。如何处理nodejs中的python输出?

// nodejs
var process = spawn('python3', ["./script.py", toSend]);
    process.stdout.on('data', function(data) {
      message = JSON.parse(data)
      console.log(message)
})

我从运行它开始SyntaxError: Unexpected token

1 个答案:

答案 0 :(得分:0)

在你的python脚本中...... 这一行

print('{"name": "bob", "height": 4, "weight": 145}')

应该改变

import json
print(json.dumps({"name": "bob", "height": 4, "weight": 145}))

这将处理并确保正确格式化JSON,以便节点可以解析JSON字符串(但您当前的版本应该没问题)。然而,在这种情况下,真正的问题是......

您正在使用

结束脚本
print('hello')

这意味着JSON.parse()将尝试解析hello作为JSON.parse()的一部分,因为您正在从stdout读取... hello不是JSON格式的。所以JSON.parse()将会失败。所以也要删除该行。

如果您在评论中说明有多个json对象要发送

您可以将所有数据合并到一个JSON对象中 my_object = {"data": "info"....}json.dumps()单个较大的对象..

obj1 = {}
obj2 = {}
myobjects = [obj1, obj2]
print(json.dumps(myobjects))

并且Node端将接收可以在

上迭代的对象列表