【发布时间】:2013-03-22 06:33:38
【问题描述】:
我正在尝试以这种方式在带有 nodejs 的存储库上获取 git shortlog 的结果:
var exec = require('child_process').exec;
exec("cd /tmp/"+folder +" && git shortlog", {maxBuffer: 500*1024}, function(error, stdout, stderror){
console.log(arguments);
});
我的回调从未使用此方法调用,程序似乎无限期地处理某些事情。
当我在提示符中启动此命令时,我得到了结果。
尝试将结果重定向到一个文件创建一个空文件:
"cd /tmp/"+folder +" && git shortlog > stats.txt"
但如果我改用git log,我就会得到结果。
你知道为什么我的回调永远不会用git shortlog 调用吗?
编辑: 我使用 spawn 得到了相同的结果:
exec("cd /tmp/"+folder, function(err){
if(err){
throw err;
}
var shortlog = spawn('git', ['shortlog']);
shortlog.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
shortlog.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
shortlog.on('close', function (code) {
console.log('child process exited with code ' + code);
});
});
编辑 2: process.chdir() 不会改变任何东西:
process.chdir('/tmp/'+folder);
var shortlog = spawn('git', ['shortlog']);
shortlog.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
【问题讨论】:
-
您可以尝试将 exec 换成 spawn 并查看触发了哪些事件。
-
谢谢,我试过了,但我遇到了同样的问题。
-
下一个刺:nodejs.org/api/process.html#process_process_chdir_directory 使用 process.chdir 而不是 exec "cd ..."
-
Arg,感谢您的回答,但我的行为相同。我已经编辑了我的帖子