2015-06-07 30 views
0

我正在尝试使用nodejs进程spawn。但不知何故,我无法做到这一点。我使用节点v0.12.2。 “gulp do-something”得到执行,我确实通过stdout看到输出结果..但退出事件从未得到执行!NodeJS process.spawn - 退出事件没有触发

var task = spawn('gulp', [ 
     'do-something' 
], { 
     cwd: configs.workingDirectory 
}); 

task.stdout.on('data', function(data){ 
     console.log(data.toString()); 
}); 

task.stderr.on('data', function (data) { 
     console.log(data.toString()); 
}); 

task.on('exit', function (exitCode) { 
     console.log("process.exitCode", exitCode) 
}); 

,当我尝试使用菌种与标准输入输出: 'IPC']

var task = spawn('gulp', [ 
      'do-something' 
    ], { 
      cwd: configs.workingDirectory, 
      stdio: ['ipc'] 
    }); 

退出事件被炒鱿鱼,但在错误发生后:

gulp: ../deps/uv/src/unix/core.c:833: uv__io_stop: Assertion `loop->watchers[w->fd] == w' failed. 

我试过其他的组合为STDIO。它会导致task.stdout和task.sterr为空或退出事件未被解雇。

+0

'close'会散发出来吗? – mscdex

+0

@mscdex不,它不。 – Johny

+0

好的。我设法使用:stdio:[0,'pipe','pipe'] – Johny

回答

1

设置stdio: [0, 'pipe', 'pipe']解决了问题!