There were already a few questions here about node.js executing commands and outputting the data, but I still can't get this working. What I want is that using node.js I want to execute a python script that runs for a long time and produces some intermediate outputs. I want to stream these outputs to the client as soon as they are produced. I have tried the following, but what I get is that I get the whole output only once the command has finished. How can I make it pass on the data into the socket in real time? Thanks.
function run_cmd(cmd, args) { var spawn = require('child_process').spawn, child = spawn(cmd, args); return child; } io.sockets.on('connection', function (socket) { var foo = new run_cmd('python', ['test.py']); foo.stdout.setEncoding('utf-8'); foo.stdout.on('data', function(data) { console.log('sending data'); io.sockets.emit('terminal', {output: data});; }); );
-uflag makes it flush after each print. Thanks a lot.