I agree with you that the node itself should perform reasonable flushing. However, I tested it with a simple node that runs at 15 Hz and only invokes ROS_INFO, ROS_WARN and ROS_ERROR functions. Without `stdbuf` the error messages are output directly (so flush on stderr works fine), but info and warn messages are output in batches of ~80 messages. (The number of messages depends on the rate, and indicates a fixed number of bytes of the stdout buffer to be filled before it is flushed)
So if you say it's not the task of roslaunch to make sure stdout is flushed correctly (which I agree) then an issue would have to be posted that the logging is rechecked so that it flushes output correctly.

Otherwise I can also replace it with this:
```
if sys.platform.startswith('linux'):
    # the two arguments 'stdbuf' and '-oL' are necessary to have real time logging, 
    # instead of all at once. only necessary if stdout is not a tty
    self.args = ['stdbuf', '-oL'] + self.args
                    
self.popen = subprocess.Popen(self.args, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=full_env, close_fds=True, preexec_fn=os.setsid)
```
then it works at least correctly on linux, and doesn't break it on windows. and maybe somebody can check how it works on windows.