Node.js + Python子进程:打印返回数据,但返回无效
我有个基本的问题。我正在用node.js和socket.io写一些初学者的代码,在这个过程中我使用了一个python子进程,并在它返回数据时触发一些动作,比如:
io.sockets.on('connection',function(socket) {
socket.on('load_api_call', function() {
var pythonarray=['/Users/<omitting path>/test_return_sub_dict.py']
var child=spawn('/Users/<omitting path>/python2.7',pythonarray)
child.stdout.on('data',function(data){
socket.emit('jsonSuccess',data.toString('utf8'));
console.log('python output: '+data);
});
child.stderr.on('data',function(data){
process.stdout.write('error output: '+data);
});
});
});
这个运行得很好。我的问题是:当我在python子进程中打印返回的数据时,上面的“child.stdout.on('data'”会因为返回的数据而被激活。然而,当我只是“return”数据时,数据并没有被返回,或者说没有以socket能接收到的方式返回。所以举个例子,在我叫做“return sub dictionary”的子进程模块中,最后一行
return sub_dict
不会返回任何socket能注意到的东西。但是这一行:
print sub_dict
会被socket注意到,并触发后续想要的动作。
从python子进程返回数据的正确方法是什么,才能让node注意到呢?
我能看出我对Python、Node或者两者的一些基本机制没有理解,但我不知道该怎么称呼它去搜索答案。
谢谢你的建议!
1 个回答
1
这个Python脚本需要把信息输出到标准输出(stdout)或标准错误(stderr),这样Node.js才能获取到这些数据。因为这两个输出流是子进程对象在监控的。根据我所知道的,仅仅返回一个值并不会自动显示这些数据,所以你需要告诉Python手动把信息打印到标准输出或标准错误。