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