从蟒发送数据帧,以便节点的应用程序和Python脚本 之间进行通信使用Python - 壳到Node.js的应用

问题描述:

林首先我发送一个变量到Python脚本。基于它,我创建了一个数据框。 然后,我想将结果数据框发送回node.js应用程序,并最终将其显示在页面上。所以问题是,在控制台中它会打印整个数据帧,它只会呈现网页上的最后一行。 这里我包括代码从蟒发送数据帧,以便节点的应用程序和Python脚本 之间进行通信使用Python - 壳到Node.js的应用

的Node.js代码:

  var pyvar = data["Search"][0]["imdbID"] 
      console.log(pyvar) 

      var pyshell = new PythonShell('script3.py'); 

      pyshell.send(JSON.stringify(pyvar)) 

      pyshell.on('message', function (message) { 
      jsondata = message 
      console.log(message); 
      }); 

      pyshell.end(function (err) { 
      if (err){ 
       throw err; 
       }; 

      console.log('finished'); 
      }); 

app.get("/data", function(req, res) { 
     res.render("data", {data: jsondata}) 
     }) 

EJS:

<h1> Table </h1> 


<%=data%> 

蟒蛇script3.py

import sys, json 
import pandas as pd 


def read_in(): 
    lines = sys.stdin.readlines() 
    return json.loads(lines[0]) 

def main(): 
    lines = read_in() 
    array1=[1,2,3,4,5] 
    array2=["a","b","c","d","e"] 

    df=pd.DataFrame({"onecolumn": lines, 
    "second":array1, 
    "third": array2 
    }) 

    print (df) 

if __name__ == '__main__': 
    main() 

在控制台中我得到:

onecolumn second third 
0 pyvar  1  a 
1 pyvar  2  b 
2 pyvar  3  c 
3 pyvar  4  d 
4 pyvar  5  e 
finished 

然而/数据显示:

Table 

4 pyvar 5 e 

这样做的pyshell.on('message', function(message){})部分就是问题所在。每次它收到一条消息时,它都会取代它,并用接收到的值替换jsondata。它很可能逐行接收来自python程序的数据。

相反,你会想要连接任何你从pyshell获得的。

var jsonData = "" 
pyshell.on("messsage", function(message){ 
    jsonData += message; 
}); 

pyshell.end(function(err){ 
    console.log(jsonData); 
}); 
+0

它排序的工作在一个行代码不是一个数据帧形式然而级联结果(以便从蟒接收到的每个值是在一个单独的线)在此: 'onecolumn第二第三0 pyvar 1 1个pyvar 2 b 2 pyvar 3 c 3 pyvar 4 d 4 pyvar 5 e' 但我仍然希望它以类似于控制台上的方式显示 –

+0

嗯,我做了另一种方式 - 将数据框转换为html文件,然后在节点内呈现它。不完全是我想要的,但现在似乎是最好的解决方案。 –