Node.js 将stdout/stderr从子进程重定向到/dev/null或类似的内容
我正在使用Node.js创建一些子进程(Node.js 将stdout/stderr从子进程重定向到/dev/null或类似的内容,node.js,stdout,stderr,child-process,Node.js,Stdout,Stderr,Child Process,我正在使用Node.js创建一些子进程(require('child\u process')),我希望确保每个子进程的stdout/stderr不会到达终端,因为我只希望记录父进程的输出。是否有方法将子进程中的stdout/stderr流重定向到/dev/null或其他非终端的位置 也许只是: var n = cp.fork('child.js',[],{ stdio: ['ignore','ignore','ignore'] }); 我只是试了一下,但似乎不起作用 现在我试着这样做:
require('child\u process')
),我希望确保每个子进程的stdout/stderr不会到达终端,因为我只希望记录父进程的输出。是否有方法将子进程中的stdout/stderr流重定向到/dev/null
或其他非终端的位置
也许只是:
var n = cp.fork('child.js',[],{
stdio: ['ignore','ignore','ignore']
});
我只是试了一下,但似乎不起作用
现在我试着这样做:
var stdout, stderr;
if (os.platform() === 'win32') {
stdout = fs.openSync('NUL', 'a');
stderr = fs.openSync('NUL', 'a');
}
else {
stdout = fs.openSync('/dev/null', 'a');
stderr = fs.openSync('/dev/null', 'a');
}
然后这个选项:
stdio: ['ignore', stdout, stderr],
但这并没有起作用,但似乎使用“detached:true”选项可能会起作用。解决方案:
要丢弃分叉子进程的stdout
和stderr
:
管道
,即分叉时使用silent=True
stdout
和stderr
管道重定向到/dev/null
说明: 委员会: 为方便起见,
options.stdio
可以是以下字符串之一:
'pipe' - equivalent to ['pipe', 'pipe', 'pipe'] (the default)
'ignore' - equivalent to ['ignore', 'ignore', 'ignore']
'inherit' - equivalent to [process.stdin, process.stdout, process.stderr] or [0,1,2]
显然不支持忽略;只有这样
fork
确实支持静默的
选项,允许用户在管道
或继承
之间进行选择
分支子进程时:
如果silent
=True,则stdio=pipe
如果silent
=False,则stdio=inherit
静音
布尔值
如果为true,则子级的stdin、stdout和stderr将通过管道传输到父级,否则将从父级继承
有关详细信息,请参阅child_process.spawn()的stdio的“管道”和“继承”选项
在您的分叉进程中劫持process.stdout.write
怎么样?不幸的是,我不能覆盖它,必须用child\u进程来实现这一点!我想我实际上可以覆盖它,但通过调用文档中的child_进程这样做有好处看起来stdio
选项是用于spawn
,而不是fork
,也许你想要silent
选项?@mzulch我认为silent选项可能就是其中之一,但这个答案很好,我在一段时间前进行了升级…我现在想知道是否有一种方法可以将子进程的stderr/stdout直接传输到文件,而不是返回到父进程,然后再传输到文件。知道吗?我想只要在child_进程中调用process.stderr.pipe()