节点subprocess事件监听

我使用节点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); 

我可以在这些pipe道事件里面添加一些像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) 

console.log(“im here”)的错误将被打印

我需要以某种方式来听这个pipe道,或者也许以某种方式扩展child.stderr.pipe(process.stderr),我需要做的是process.exit(1) ,如果我从上面的代码语句中得到错误…

也许与JavaScript的原型,但不知道如何做到这一点…

请协助Im卡住,我知道这并不简单…

这适用于我:

 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. */ 

你可以在这里用代码“玩”: https : //tonicdev.com/shanshan/cp-spawn-piping

您可以订阅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()); });