【问题标题】:Node.js + Python Child Process: Print returns data, but return doesn'tNode.js + Python 子进程:打印返回数据,但返回不
【发布时间】:2014-05-04 00:43:05
【问题描述】:

我有一个基本问题。我正在使用 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 sub_dict

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

print sub_dict

会被套接字注意到并触发后续所需的操作。

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

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

感谢您的建议!

【问题讨论】:

    标签: javascript python node.js sockets


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我相信你,基于我从那以后读到的内容以及我的黑客朋友告诉我的内容。我会认为这是正确的。
    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2018-08-06
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多