Узел Js child_process> exec: как непрерывно возвращать стандартный вывод дочернего скрипта в paent script?

#node.js #exec #stdout #child-process

#node.js #exec #стандартный вывод #дочерний процесс

Вопрос:

У меня есть массив скрипта, который содержит команду другого скрипта.

 [
  'node controllers/script_one/import.js main init',
  'node controllers/script_two/import.js main init'
]
 

Я передал приведенный выше массив в нижеприведенную функцию, чтобы запускать команды одну за другой.

 async function exec_commands(commands,index = 0)
{
    let command = commands.shift();
    exec(command, (error, stdout, stderr) => {
        
        if (error) 
        {
            log.error("*****************************************************");
            log.error("error Occured in command:");
            log.error(error);
            log.error("*****************************************************");
        }
        if(stdout)
        {
            log.info("*****************************************************");
            log.info("shell Logs:");
            log.info(stdout);
            log.info("*****************************************************");
        }

        if(stderr)
        {
            log.info("*****************************************************");
            log.info("shell:");
            log.info(stderr);
            log.info("*****************************************************");
        }

        index  ;

        if(commands.length) 
        {
            log.info("Executing Next Command From Array, Loop Index:" index);
            exec_commands(commands,index)
        }
        else
        {
            process.exit(0);
        }

    });

}
 

Теперь эта функция находится в другом скрипте main_script.js .

после выполнения команды node main_script.js обе команды выполняются одна за другой, но 2-я команда занимает слишком много времени из-за ее внутренних процессов, она выдает ошибку ниже на терминале.

 packet_write_wait: Connection to <IP ADDRESS> port 22: Broken pipe
 

потому что дочерний процесс ничего не возвращает, пока не завершит свои процессы.

Итак, как мы можем непрерывно печатать журналы в функции exec_commands во время выполнения дочерних команд?