2017-04-06 22 views
1

私はnodeとsocket.ioを初めて使っています。私は、両方からPythonのプロセスを起動し、Webページとの間でデータをやりとりするために使用しようとしているnodejsサーバーを持っています。 Pythonの最後では、私はPythonのstdin/stdoutパイプを使用しようとしています。nodejとPythonの間でデータを交換する

Pythonからnodejsに至るまで、そしてサーバー上にあるものはすべてうまく動作します。しかし、nodejからstdin.writeを使ってPythonにデータを渡そうとすると、nodeは "write after end"エラーでクラッシュします。私がPythonから受け取るために使用しているソケットが、私が返送しようとしているものと競合しているのではないかと思います。私は毎秒ウェブページにデータを送信するためにタイマーを使用しています。

これはsys.stdin.readlines()を呼び出すときにEOFを期待するPythonと関係があるようですが、nodejsからstdin.end()を使用するとエラーが発生します。興味深いことに、私がstdin.endを呼ぶことがないと、私はエラーを受け取らないが、何も受け取らない。

ご協力いただきまして誠にありがとうございます。私はsocket.ioについて何かが間違っているのか分かりません。ありがとうございました。

NODEJS、IN

: Pythonのプロセス産卵:ブラウザからの受信とに送信

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); 

:ブラウザにデータを送信する

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

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

のPythonからデータを受信します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 

}); Pythonで

: はnodejsに送信:

nodejsから受信
output = "dataout" 
sys.stdout.write(output) 
sys.stdout.flush() 

lines = [] 

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

答えて

0

あなたはノードとPythonを組み合わせたい場合、私は最善の解決策は、microserviceアーキテクチャに移動することだと思いますSeneca.JSを使用します。私があなたの中にいるなら、私はpythonプロセスとnode.jsマイクロサービスの間でやりとりするための休憩インターフェースを作成します。詳細はこちらhere

+0

ありがとうございます。私がしようとしていることは、広く普及しているようには見えません。いずれにしても、セネカは、このプロジェクトではなくても、私が持っている他のいくつかのためにうまくいくかもしれない素晴らしいシステムのようです。私はPythonのstdoutストリームを使って単純にノードにデータを出力し、ノードのサーバー機能を使用してブラウザにデータを表示しました。私はブラウザからNodeにデータを返すことができましたが、Pythonに送ることはできませんでした(stdinストリームはもっと大変でしたが、EOFを送信しなければ応答できませんでした。 – Dewey

関連する問題