我刚接触node和socket.io。我有一个nodejs服务器,我试图使用它来生成Python进程并在网页之间传递数据。在Python端,我尝试使用Python的标准输入输出管道。
从Python到nodejs再到服务器上的所有内容都正常工作。但是,当我尝试使用stdin.write将数据从nodejs发送回Python时,node会崩溃并显示“write after end”错误。我想知道我用于接收Python信息的socket是否与我尝试发送的socket发生了冲突。我正在使用计时器每秒向网页发送数据。
这似乎与Python在调用sys.stdin.readlines()时期望EOF有关,但是当我从nodejs使用stdin.end()时,就会出现错误。有趣的是,如果我从未调用stdin.end,则不会出现错误,但我也不会收到任何消息。
非常感谢任何帮助。恐怕我不太了解socket.io,在这里看不出什么问题。谢谢。
在NODEJS中: 生成Python进程:
var util = require('util'),
spawn = require('child_process').spawn,
py = spawn('python', ['data_collect.py']);
从Python接收数据:
py.stdout.on('data', function(data){
python_output = data.toString();
向浏览器发送数据:
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);
从浏览器接收数据并发送到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中:
发送到Node.js:
output = "dataout"
sys.stdout.write(output)
sys.stdout.flush()
从nodejs接收:
lines = []
while True:
line = sys.stdin.readline()
if line !='':
lines.append(line)
else:
break
return lines