最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何在NodeJS中生成一个新进程并将stderr重定向到stdout?

IT培训 admin 6浏览 0评论

如何在NodeJS中生成一个新进程并将stderr重定向到stdout?

我需要在NodeJS中生成一个新进程。它的stderr应该被重定向到它的stdout(与bash中的2>&1相同)。

proc.js

var child_process = require('child_process');

var opt = {stdio: ['ignore', 'pipe', 'pipe']};
var proc = child_process.spawn('./myscript', [], opt);
proc.stderr.pipe(proc.stdout);
proc.stdout.on('data', function (buf) {
    console.log('stdout', buf.toString());
});
proc.on('error', function (...args) {
    console.log('error', args);
});
proc.on('exit', function (code, signal) {
    console.log('exit', code, signal);
});
proc.on('close', function (code, signal) {
    console.log('close', code, signal);
});

的MyScript

#!/bin/bash

echo 111
echo 222 >&1
echo 333 >&2
echo 444

不幸的是,这不起作用。输出中没有333:

stdout 111
222
444

exit 0 null
close 0 null
回答如下:

我认为你的问题是你正在将子(proc)stderr传递给它自己的stdout,而不是你自己的stdout。 proc.stdout是一个源,而不是一个接收器,所以它不能从另一个管道获取输入。

也许你想要的是,而不是:

proc.stderr.pipe(proc.stdout);

这个:

proc.stderr.pipe(process.stdout);

process.stdout是你的父进程stdout,它是一个接收器,所以它可以采用proc.stderr,这是一个源。

如何在NodeJS中生成一个新进程并将stderr重定向到stdout?

我需要在NodeJS中生成一个新进程。它的stderr应该被重定向到它的stdout(与bash中的2>&1相同)。

proc.js

var child_process = require('child_process');

var opt = {stdio: ['ignore', 'pipe', 'pipe']};
var proc = child_process.spawn('./myscript', [], opt);
proc.stderr.pipe(proc.stdout);
proc.stdout.on('data', function (buf) {
    console.log('stdout', buf.toString());
});
proc.on('error', function (...args) {
    console.log('error', args);
});
proc.on('exit', function (code, signal) {
    console.log('exit', code, signal);
});
proc.on('close', function (code, signal) {
    console.log('close', code, signal);
});

的MyScript

#!/bin/bash

echo 111
echo 222 >&1
echo 333 >&2
echo 444

不幸的是,这不起作用。输出中没有333:

stdout 111
222
444

exit 0 null
close 0 null
回答如下:

我认为你的问题是你正在将子(proc)stderr传递给它自己的stdout,而不是你自己的stdout。 proc.stdout是一个源,而不是一个接收器,所以它不能从另一个管道获取输入。

也许你想要的是,而不是:

proc.stderr.pipe(proc.stdout);

这个:

proc.stderr.pipe(process.stdout);

process.stdout是你的父进程stdout,它是一个接收器,所以它可以采用proc.stderr,这是一个源。

发布评论

评论列表 (0)

  1. 暂无评论