Javascript Node.js截取另一进程的输出
我正在尝试从正在运行的Node.js进程启动几个进程。 问题是,这些必须从脚本启动,并使用exec,如下所示:Javascript Node.js截取另一进程的输出,javascript,node.js,child-process,Javascript,Node.js,Child Process,我正在尝试从正在运行的Node.js进程启动几个进程。 问题是,这些必须从脚本启动,并使用exec,如下所示: exec("./scripts/run.sh",(err, stdout, stderr) => { if (err) { console.error(err); return; } this.logs = this.logs.unshift(timestamp() + stdout); this.errorlogs = this.logs.unshift(ti
exec("./scripts/run.sh",(err, stdout, stderr) => {
if (err) {
console.error(err);
return;
}
this.logs = this.logs.unshift(timestamp() + stdout);
this.errorlogs = this.logs.unshift(timestamp() + stderr);
});
不重定向我需要的输出。
Fork似乎只适用于Node.js进程,而这些进程不是
这些进程工作得很好,并作为主进程的子进程发挥作用。我只需要得到stdout和stderr的输出。
有什么建议吗?child\u process.exec()
仅在执行的进程终止后运行回调函数一次。如果希望在进程仍在运行时从进程的stdout和stderr获取增量数据,请使用子进程.spawn()
并设置选项.stdio
属性,使进程的stdout和stderr可供父进程使用
child\u process.spawn()
返回一个ChildProcess
对象。要收集进程的输出,可以为该对象的stdout
和stderr
流建立数据处理程序。您还应该为在流程启动失败时触发的错误
事件和在这些流关闭且流程终止时触发的关闭
事件建立处理程序
它看起来像这样:
child = spawn("./scripts/run.sh",
[],
{stdio: ['ignore', 'pipe', 'pipe']});
child.on('error', (err) => }
console.log('child launch failed: ', err);
});
child.on('close', (code) => {
console.log('child ended: ', code);
});
child.stdout.on('data', (outdata) => {
this.logs = this.logs.unshift(timestamp() + outdata);
});
child.stderr.on('data', (errdata) => {
this.errorlogs = this.logs.unshift(timestamp() + errdata);
});
血淋淋的详细信息在Node.js文档中,Try
stderr.on('data',console.log)
和stdout.on('data',console.log)
?似乎没有输出任何内容。谢谢你!这正是我需要的,谢谢!有趣的是,此方法将this.log转换为非数组。但它是一个指针,所以它不需要this.logs=this.logs。。。无论如何