2017-08-10 88 views
1

我一直在試圖以下這個教程節點JS和Python之間進行通信:http://www.sohamkamani.com/blog/2015/08/21/python-nodejs-comm/Python和節點JS通信

蛇皮文件讀取一個javascript陣列和打印使用numpy的模塊的總和。這裏是python和node js文件的代碼。

Python代碼:

import sys, json, numpy as np 

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

    def main(): 
     #get our data as an array from read_in() 
     lines = read_in() 

     #create a numpy array 
     np_lines = np.array(lines) 

     #use numpys sum method to find sum of all elements in the array 
     lines_sum = np.sum(np_lines) 

     #return the sum to the output stream 
     print lines_sum 

    #start process 
    if __name__ == '__main__': 
     main() 

節點js代碼:

var spawn = require('child_process').spawn, 
     py =spawn('python', ['compute_input.py']), 
     data = [1,2,3,4,5,6], 
     dataString=''; 

    py.stdout.on('data', function(data) { 
     dataString += data.toString(); 
    }); 

    py.stdout.on('end', function() { 
     console.log('Sum = ', dataString); 
    }); 

    py.stdin.write(JSON.stringify(data)); 
    py.stdin.end(); 

錯誤消息:

Error: write EPIPE 
     at exports._errnoException (util.js:1018:11) 
     at Socket._writeGeneric (net.js:711:26) 
     at Socket._write (net.js:730:8) 
     at doWrite (_stream_writable.js:331:12) 
     at writeOrBuffer (_stream_writable.js:317:5) 
     at Socket.Writable.write (_stream_writable.js:243:11) 
     at Socket.write (net.js:657:40)   
     at Module._compile (module.js:570:32) 
     at Object.Module._extensions..js (module.js:579:10) 
+0

(1)這是無效的Python代碼。 (2)你如何運行腳本? – kazemakase

+0

(1)你能澄清什麼是無效的? (2)我正在使用節點js命令提示符運行腳本。 – Akshay

+0

像'** def read_in():**'這樣的函數定義不應該包含這些星星。如果你單獨運行Python腳本,解釋器會告訴你。我猜節點吞下了子進程的錯誤信息。 – kazemakase

回答

1

的Python腳本被引發錯誤。 python命令調用了python3而不是python 2.7,爲此寫入了腳本並且腳本錯誤了。 EPIPE錯誤被拋出,因爲python腳本提前結束,並且節點嘗試讀取/寫入到已經關閉的管道。