Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将stdout/stderr从子进程重定向到/dev/null或类似的内容_Node.js_Stdout_Stderr_Child Process - Fatal编程技术网

Node.js 将stdout/stderr从子进程重定向到/dev/null或类似的内容

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'] }); 我只是试了一下,但似乎不起作用 现在我试着这样做:

我正在使用Node.js创建一些子进程(
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()