将 stdout/stderr 从 child_process 重定向到 /dev/null 或类似的东西
Redirect stdout/stderr from a child_process to /dev/null or something similar
我正在用 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" 选项可能会成功。
解决方案:
丢弃分叉子进程的 stdout
和 stderr
:
设置一个pipe
,即在分叉时使用silent = True
。
并将父进程上的 stdout
和 stderr
管道重定向到 /dev/null
.
解释:
node.js documentation states :
为方便起见,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()
does NOT support ignore
; Only childprocess.spawn()
确实如此。
fork
does support a silent
option that allows one to choose between pipe
OR inherit
.
分叉子进程时:
如果 silent
= True,则 stdio = pipe
.
如果 silent
= False,则 stdio = inherit
.
silent
Boolean
If true, stdin, stdout, and stderr of the child will be piped to the parent, otherwise they will be inherited from the parent.
See the 'pipe' and 'inherit' options for child_process.spawn()'s stdio for more details.
我正在用 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" 选项可能会成功。
解决方案:
丢弃分叉子进程的 stdout
和 stderr
:
设置一个
pipe
,即在分叉时使用silent = True
。并将父进程上的
stdout
和stderr
管道重定向到/dev/null
.
解释:
node.js documentation states :
为方便起见,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()
does NOT support ignore
; Only childprocess.spawn()
确实如此。
fork
does support asilent
option that allows one to choose betweenpipe
ORinherit
.
分叉子进程时:
如果 silent
= True,则 stdio = pipe
.
如果 silent
= False,则 stdio = inherit
.
silent
BooleanIf true, stdin, stdout, and stderr of the child will be piped to the parent, otherwise they will be inherited from the parent.
See the 'pipe' and 'inherit' options for child_process.spawn()'s stdio for more details.