Is there a way to get ‘live’ output lines from a python script spawned by child_process.execFile without flushing stdout every time?

I am trying to get the lines a (‘never ending’) python script puts into stdout. But currently my code would only log something to the console when the python process exits. Is there a way I can get the ‘live’ output of the python script line by line?

spawn_child.js:

let execFile = require("child_process").execFile;

var child = execFile("python3", ["PATH_TO_FILE"]);

child.stdout.on("data", data=>{
    console.log(data.toString());
});
child.stderr.on("data", data=>{
    console.log(data.toString());
});
child.on("exit", code=>{
    console.log("Child exited with code "+code);
});

The python file:

from time import sleep

while True:
    sleep(3)
    print("test")

Edit: It works when using a nodejs script instead of a python script

Answer

change python script to

import time
import sys

while True:
    time.sleep(1)
    print("test")
    sys.stdout.flush()

and increase the buffer size of the child process

const child = execFile("python", ["./runner.py"], {
    detached: true,
    maxBuffer: 10 * 1024 * 1024 * 1024
});

or you can do it without the flushing to stdout with python-shell

const { PythonShell } = require('python-shell');

let pyshell = new PythonShell('runner.py');
    
pyshell.on('message', function (message) {
    console.log(message);
});

pyshell.end(function (err, code, signal) {
    if (err) throw err;
    console.log('The exit code was: ' + code);
    console.log('The exit signal was: ' + signal);
    console.log('finished');
});