在nodejs和Python

时间:2017-04-06 08:42:42

标签: python node.js socket.io

我是node和socket.io的新手。我有一个nodejs服务器,我试图用它来生成Python进程,并从网页传递数据。在Python端,我试图使用Python的stdin / stdout管道。

从Python到nodejs以及服务器的所有功能都可以正常工作。但是,当我尝试使用stdin.write将数据从nodejs传递回Python时,节点崩溃,并且#34;结束后写入"错误。我想知道我用来接收Python的套接字是否与我尝试发回的套接字冲突。我正在使用计时器每秒向网页发送数据。

这似乎与Python在调用sys.stdin.readlines()时期望EOF有关,但是,当我使用来自nodejs的stdin.end()时,当我得到错误时。有趣的是,如果我从不打电话给stdin.end,我就不会收到错误,但我也没有收到任何错误。

非常感谢任何帮助。我担心我对socket.io不太了解,看看这里出了什么问题。谢谢。

IN NODEJS: 产生Python过程:

var util = require('util'),
spawn = require('child_process').spawn,
py = spawn('python', ['data_collect.py']);

从Python接收数据:

py.stdout.on('data', function(data){
    python_output = data.toString();

将数据发送到浏览器:

var listener = io.listen(server);
listener.sockets.on('connection', function (socket) {
    socket.emit( 'dataPacket1', {variable_1: data1});
    socket.emit( 'dataPacket2', {variable_2: data2});
    socket.emit( 'dataPacket3', {variable_3: data3});
}, 1000); 

从浏览器接收并发送到Python:

socket.on('messageFromBrowser', function(data) {
    py.stdin.setEncoding('utf-8');
    py.stdin.write(JSON.stringify(data.browser_value+'\n'));
    py.stdin.end();   <--- Error happens here

});

IN PYTHON: 发送到nodejs:

output = "dataout"
sys.stdout.write(output)
sys.stdout.flush() 

从nodejs接收:

lines = []

while True:
    line = sys.stdin.readline()
    if line !='':
        lines.append(line)
    else:
        break
return lines

2 个答案:

答案 0 :(得分:0)

如果你想组合node和python,我认为最好的解决方案是使用Seneca.JS转向微服务架构。如果我在你身边,我将创建一个休息接口,以便在python进程和node.js微服务之间进行通信。您可以找到更多信息here

答案 1 :(得分:0)

删除py.stdin.end()。 并确保'\ n'在stringify之外

py.stdin.write(JSON.stringify(data.browser_value)+'\n');