Stream child process output in flowing mode

javascript, node.js, python

Solution

You need to flush the output in the child process.

Probably you think this isn't necessary because when testing and letting the output happen on a terminal, then the library flushes itself (e. g. when a line is complete). This is not done when printing goes to a pipe (due to performance reasons).

Flush yourself:

#!/usr/bin/env python

import sys, time

while True:
  print "foo"
  sys.stdout.flush()
  time.sleep(2)

Problem

I have custom command line written using Python which prints its output using "print" statement. I am using it from Node.js by spawning a child process and sending commands to it using child.stdin.write method. Here's source: ``` var childProcess = require('child_process'), spawn = childProcess.spawn; var child = spawn('./custom_cli', ['argument_1', 'argument_2']); child.stdout.on('data', function (d) { console.log('out: ' + d); }); child.stderr.on('data', function (d) { console.log('err: ' + d); }); //execute first command after 1sec setTimeout(function () { child.stdin.write('some_command' + '\n'); }, 1000); //execute "quit" command after 2sec //to terminate the command line setTimeout(function () { child.stdin.write('quit' + '\n'); }, 2000); ``` Now the issue is I am not receiving the output in flowing mode. I want get the output from child process as soon as it's printed but I am receiving the output of all the commands only when child process is terminated (using custom cli's quit command).

Original source