javascript - Node.js + Python 子进程 : Print returns data, 但没有返回

标签 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子进程中返回的数据时,上面的“child.stdout.on('data'”将被返回的数据激活。但是,当我只是“返回”数据时,没有返回数据,或者无论如何都没有以套接字可以听到的方式返回。例如,在我的子进程模块中名为“返回子字典”的最后一行

return sub_dict

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

print sub_dict

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

从 python 子进程返回数据以便 Node 会注意到它的正确方法是什么?

我发现我不理解 Python、Node 或两者的一些基 native 制,但我不知道如何调用它来 google 答案。

感谢您的建议!

最佳答案

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

关于javascript - Node.js + Python 子进程 : Print returns data, 但没有返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23451359/

相关文章:

JavaScript 正则表达式从文本文件中获取标题和副标题

python - 可视化文本分类

python - 从 sql 字符串中提取表名、列等参数

javascript - express-validator 什么都不做

javascript - 如何从 .t​​hen 返回值到 JavaScript 中的父函数/作用域

javascript - 使用 JavaScript 循环在一行中打印 "###"

javascript - 如何在 TinyMCE 4.0.10 版本中使用 importcss 插件? (无法加载 content_css 并查看样式下拉列表)

javascript - Firefox 控制台中的 Konva 错误/警告

python-pptx:将图片插入占位符但出现错误

javascript - 即使我有 catch() 函数,为什么也会收到 UnhandledPromiseRejectionWarning?