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);
这是一种优雅的方式。非常感谢。