从蟒发送数据帧,以便节点的应用程序和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);
});
它排序的工作在一个行代码不是一个数据帧形式然而级联结果(以便从蟒接收到的每个值是在一个单独的线)在此: 'onecolumn第二第三0 pyvar 1 1个pyvar 2 b 2 pyvar 3 c 3 pyvar 4 d 4 pyvar 5 e' 但我仍然希望它以类似于控制台上的方式显示 –
嗯,我做了另一种方式 - 将数据框转换为html文件,然后在节点内呈现它。不完全是我想要的,但现在似乎是最好的解决方案。 –