我正在使用Node.js(require('child_process')
)创建一些child_processes,我想确保每个child_process的stdout / stderr不会转到终端,因为我只希望父进程的输出到记录。有没有办法将child_processes中的stdout / stderr流重定向到/dev/null
或其他不是终端的地方?
https://nodejs.org/api/child_process.html
也许只是:
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”选项可能会使这个工作。
答案 0 :(得分:6)
抛弃分叉子进程的stdout
和stderr
:
设置pipe
,即在分叉时使用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]
显然 childprocess.fork()
不支持ignore
;只有childprocess.spawn()
。
fork
支持silent
选项,允许用户在pipe
或inherit
之间进行选择。
分叉子过程时:
如果silent
= True,则stdio = pipe
如果silent
= False,则stdio = inherit
。
silent
布尔如果为true,则将子节点的stdin,stdout和stderr传送给父节点,否则它们将从父节点继承。
查看' pipe'并且'继承' child_process.spawn()' s stdio的选项以获取更多详细信息。