【发布时间】:2016-02-05 04:34:16
【问题描述】:
我正在使用 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”选项可能会成功。
【问题讨论】:
-
在你的分叉进程中劫持
process.stdout.write怎么样? -
不幸的是我不能覆盖它,child_process 必须有办法做到这一点!
-
我想我实际上可以覆盖它,但是通过 child_process 调用这样做有好处
-
在文档中,
stdio选项似乎适用于spawn,而不是fork,也许您想要silent选项? -
@mzulch 我认为静音选项可能是一个
标签: node.js stdout stderr child-process