我有一个NodeJS程序,可以启动多个子进程。我想要做的是循环每一个,显示标准输出我选择的任何一个。
我已经尝试使用“管道”启动子流程'然后做
process.stdout.pipe(childproc.stdout);
但那会挂起然后崩溃。
我可以很好地展示'继承'但后来我无法在孩子之间切换。然后,我需要能够不显示任何内容,并显示程序自己的信息。
知道如何在一系列子进程之间重定向我的stdout吗?
答案 0 :(得分:1)
听起来像一个非常有趣的问题。基于我最近完成的一些工作,我有一个可能的解决方案。如果你要生成每个进程并在每个进程上都有一个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设置为true或false,您就可以关闭并将stdout和stderr转储到您的子进程的终端。
现在,如何避免将主进程stdout放在那里,我认为你必须在一个函数中包装console.log,以确保你不会同时尝试从子进程输出。