我使用节点child_process API
https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
var child = child_process.spawn(cmd, val, options);
来自孩子的我使用以下
child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);
我可以在这些管道事件里面添加一些代码,比如console.log吗?
例如可能有原型
child.on('error', function(err) {
console.log(err);
});
更新
我需要的是听取此childProcess.stderr.pipe(process.stderr);
,如果我收到错误,请process.exit(1)
当我尝试像我得到的错误
child.stderr.pipe(function () {
console.log("im here");
process.stderr;
process.exit(1);
}
);
UPDATE2
我尝试以下
var child = child_process.spawn(cmd, value, opt);
child.stdout.on('data', function (data) {
console.log("IM HERE");
console.log('data' + data);
});
child.stderr.on('data', function (data) {
console.log("IM HERE");
console.log('test: ' + data);
reject(data);
});
child.on('close', function (code) {
console.log("IM HERE");
console.log("close");
});
child.on('error', function (err) {
console.log("IM HERE");
console.log(err);
});
child.stderr.on('error', function (err) {
console.log("IM HERE");
console.log("my Erorr");
process.stderr.emit('error', err);
});
child.stdout.on('data', function (buf) {
console.log("IM HERE");
console.log('buf receive');
console.log(buf.toString());
});
//当我添加以下内容时,我会在日志中看到错误
child.stderr.pipe(process.stderr)
如果出现错误
,则打印出非控制台.log(“im here”)
我需要以某种方式监听这个管道或者以某种方式扩展child.stderr.pipe(process.stderr),我需要做的是process.exit(1)
,以防我从上面的代码语句中得到错误。 ..
也许使用javascript原型但不确定如何做到这一点......
请帮助我卡住,我知道这不简单......
答案 0 :(得分:5)
这对我有用:
var child_process = require('child_process');
var cmd = 'ls';
var value = ['-z', '/usr'];
var opt = { };
var child = child_process.spawn(cmd, value, opt);
child.stdout.on('data', function (data) {
console.log("IM HERE");
console.log('data' + data);
});
child.stderr.on('data', function (data) {
console.log("IM HERE - Error");
console.log('test: ' + data);
});
child.on('close', function (code) {
console.log("IM HERE");
console.log("close");
});
控制台输出:
/*
IM HERE - Error
test: ls: invalid option -- 'z'
Try 'ls --help' for more information.
IM HERE
close
*/
您身边的问题,也许您正在产生的命令不会使用stderr?
<强>更新强>
如果我添加process.exit()
var child_process = require('child_process');
var cmd = 'ls';
var value = ['-z', '/usr'];
var opt = { };
var child = child_process.spawn(cmd, value, opt);
child.stdout.on('data', function (data) {
console.log("IM HERE");
console.log('data' + data);
});
child.stderr.on('data', function (data) {
console.log("IM HERE - Error");
console.log('test: ' + data);
process.exit(1); // <<<< this works as expected and exit the process asap
});
child.on('close', function (code) {
console.log("IM HERE");
console.log("close");
});
输出略有不同(没有来自孩子的关闭事件)
/*
IM HERE - Error
test: ls: invalid option -- 'z'
Try 'ls --help' for more information.
*/
你可以&#34;玩&#34;使用此处的代码:https://tonicdev.com/shanshan/cp-spawn-piping
答案 1 :(得分:0)
您可以订阅data
事件(stdout或stderr)并听取它
child.stdout.on('data', function (buf) {
console.log(buf.toString());
});
例如
const spawn = require('child_process').spawn;
const child = spawn('ping', ['google.com']);
child.stdout.on('data', function (buf) {
console.log('buf receive');
console.log(buf.toString());
});