2017-10-18 83 views
2

林首先我發送一個變量到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 

回答

2

這樣做的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文件,然後在節點內呈現它。不完全是我想要的,但現在似乎是最好的解決方案。 –

相關問題