Node.js + Python子进程:打印返回数据,但返回不是

时间:2014-05-04 00:43:06

标签: javascript python node.js sockets

我有一个基本问题。我正在用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子进程中返回的数据时,上面的&#34; child.stdout.on(&#39;数据&#39;&#34;将由返回的数据激活。但是,当我只是&#34;返回&#34;数据时,不会返回任何数据,或者无论如何都不会以套接字可以听到的方式返回。例如,在我的子进程模块中调用&#34;返回子词典&#34;,最后一行

return sub_dict

不会返回套接字会注意到的任何内容。但最后一行:

print sub_dict
套接字会注意到

并触发后续所需的操作。

从python子进程返回数据的正确方法是什么,节点会注意到它?

我可以看到我不理解Python,Node或两者的一些基本机制,但我不知道该怎么称呼谷歌答案。

感谢您的建议!

1 个答案:

答案 0 :(得分:1)

python脚本必须输出到stdout或stderr以便节点选择数据,因为那些是子进程对象正在观看的流。 AFAIK只返回一个值并不会自动显示该数据,因此您必须告诉python手动打印到stdout或stderr。