21
You can use
long_running_command 1>&2 |& print_progress
The problem is that libc will line-buffer when stdout to screen, and full-buffer when stdout to a file. But no-buffer for stderr.
I don't think it's the problem with pipe buffer, it's all about libc's buffer policy.