我有一个启动多个子进程的NodeJS程序。我要做的是循环遍历每一个,显示我选择的stdout。
我试过用'pipe'启动子进程,然后执行
process.stdout.pipe(childproc.stdout);
但是挂起然后崩溃。
我可以很好地显示'继承',但我不能在孩子之间切换。然后,我需要能够不显示它们中的任何内容,并显示程序自己的信息。
任何想法如何在一系列子进程之间重定向我的标准输出?
听起来是个很有趣的问题。根据我最近做的一些工作,我有一个可能的解决方案。如果您要生成每个进程,并且每个进程上都有标准输出的处理程序,那么您可以检查一个全局标志,该标志告诉您要输出哪个标准输出。
var child = spawn(sExeName, aArgs);
var child2 = spawn(sExeName2, aArgs2);
var childOutput = false;
var child2Output = false
child.stdout.on('data', function (data) {
if(childOutput === true)
{ process.stdout.write(data.toString()); }
});
child.stderr.on('data', function (data) {
if(childOutput === true)
{ process.stdout.write(data.toString()); }
});
child2.stdout.on('data', function (data) {
if(child2Output === true)
{ process.stdout.write(data.toString()); }
});
child2.stderr.on('data', function (data) {
if(child2Output === true)
{ process.stdout.write(data.toString()); }
});
现在只要使用任何你喜欢的方法让它设置标志childOutput和child2Output为真或假,你可以关闭和打开stdout和stderr被转储到你的子进程的终端。
现在,如何避免将主进程stdout放在那里,我认为您必须将console.log包装在一个函数中,以确保您不会同时尝试从子进程输出。