It's `b a c`, because `print` writes into the sys.stdout *buffer* that only flushes when it goddamn feels like it, whereas `subprocess.run` plucks the file handle out of sys.stdout and hands it to the child process.
If you instead run from a terminal *without* piping to `tr`, or you set `PYTHONUNBUFFERED=1`, then the output is instead in the `a b c` order.
yayyyyy 馃槶