我正在使用spawn()进行git调用。 有时它工作正常,但有时它似乎挂起了。 我没有看到任何事件触发(错误、退出、关闭),但我看到有证据表明该过程实际上已成功完成。
var spawn = require('child_process').spawn;
spawn('git', ['push', 'origin', 'master'])
.on('error', function(error) {
console.log("ERROR: DETAILS: " + error);
})
.on('close', function(code) {
console.log("SUCCESS: CODE: " + code);
})
.on('exit', function(code) {
console.log("EXIT: CODE: " + code);
})
事实证明,一旦 stderr 缓冲区超过 24kb,您必须从中读取,否则您看不到任何完成事件。 可能的解决方法:
-
在生成调用上设置 stdio 选项。
spawn('git', ['push', 'origin', 'master'], {stdio: 'ignore'});
请参阅节点子进程文档了解所有可能性 - 有很多。
-
添加 on(数据) 处理程序。
var git = spawn('git', ['push', 'origin', 'master']); ... git.stderr.on('data', function(data) { // do something with it });
-
通过管道将其传输到标准输出/标准。 这对于您的应用程序来说可能过于冗长,但为了完整性而包括它。
var git = spawn('git', ['push', 'origin', 'master']); ... git.stderr.pipe(process.stderr); git.stdout.pipe(process.stdout);