【问题标题】:Exec not returning anything when trying to run git shortlog with nodejs尝试使用nodejs运行git shortlog时执行不返回任何内容
【发布时间】: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,感谢您的回答,但我的行为相同。我已经编辑了我的帖子

标签: git node.js exec


【解决方案1】:

git shortlog 认为它必须从标准输入读取一些东西,因此无限期等待。试试这个:

exec('git shortlog < /dev/tty', { cwd : "/tmp/" + folder }, function(err, stdout, stderr) {
  console.log(arguments);
});

【讨论】:

  • 非常非常非常非常感谢您的回答。
  • 对于 Windows,使用 CON 而不是 /dev/tty
【解决方案2】:

既然@robertklep 的回答是正确的,恐怕它也不完整。 在 *nix 系统上,是的,您可以将它与 /dev/tty 一起使用,但在 Windows 上,这将引发类似

的错误

系统找不到指定的路径。

要在 Windows 上解决这个问题,你可以这样做:

var exec = require('child_process').exec;
var tty = process.platform === 'win32' ? 'CON' : '/dev/tty';

exec('git shortlog < ' + tty, { cwd : '/tmp/' + folder }, function(error, stdout, stderr) {
  console.log(arguments);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 2014-06-24
    • 2015-05-12
    • 1970-01-01
    相关资源
    最近更新 更多