Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在节点中,当特定文本出现在标准输出中时,如何运行函数?_Javascript_Node.js - Fatal编程技术网

Javascript 在节点中,当特定文本出现在标准输出中时,如何运行函数?

Javascript 在节点中,当特定文本出现在标准输出中时,如何运行函数?,javascript,node.js,Javascript,Node.js,我正在创建一个子进程来执行warn脚本并将其记录到stdout,如下所示: const child = require('child_process').exec(`yarn run tf`) child.stdout.pipe(process.stdout) const functionToExecute = () => {...} // When a certain text appears in stdout, run functionToExecute 此脚本将启动一个持续几

我正在创建一个子进程来执行
warn
脚本并将其记录到
stdout
,如下所示:

const child = require('child_process').exec(`yarn run tf`)
child.stdout.pipe(process.stdout)

const functionToExecute = () => {...}

// When a certain text appears in stdout, run functionToExecute
此脚本将启动一个持续几分钟的Terraform构建。我知道当某个特定文本被打印到
stdout
时,构建就完成了。我只想在这种情况发生时执行函数

如何做到这一点?

来自-一个优秀的节点/Javascript资源。大致如下:

const {chunksToLinesAsync, chomp} = require('@rauschma/stringio');
const {spawn} = require('child_process');

async function main() {
  const filePath = process.argv[2];
  console.log('INPUT: '+filePath);

  const source = spawn('cat', [filePath],
    {stdio: ['ignore', 'pipe', process.stderr]}); // (A)

  await echoReadable(source.stdout); // (B)

  console.log('### DONE');
}
main();

async function echoReadable(readable) {
  for await (const line of chunksToLinesAsync(readable)) { // (C)
    const isComplete  = /process-is-complete/.test(line);

    if (isComplete) {
      spawnSomethingOnCompletion();
    }

    console.log('LINE: '+chomp(line))

  }
}

你可以在下面试试

const child = require('child_process').exec(`yarn run tf`);
const readline = require('readline');
const rl = readline.createInterface({input:child.stdout})

const functionToExecute = line => {
    //something you want to with ouput string(line)
}
rl.on('line', functionToExecute);

这是一种优雅的方式。非常感谢。