gpt4 book ai didi

node.js - 为什么我通过 spawn() 创建的 Node 子进程挂起?

转载 作者:搜寻专家 更新时间:2023-10-31 22:22:37 25 4
gpt4 key购买 nike

我正在使用 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,您必须从中读取,否则您将看不到任何完成事件。可能的解决方法:

  1. 在 spawn 调用中设置 stdio 选项。

    spawn('git', ['push', 'origin', 'master'], {stdio: 'ignore'});

    有关所有可能性,请参阅 Node ChildProcess 文档 - 有很多。

  2. 添加一个 on(data) 处理程序。

    var git = spawn('git', ['push', 'origin', 'master']);
    ...
    git.stderr.on('data', function(data) {
    // do something with it
    });
  3. 将其通过管道传输到标准输出/标准错误。这对于您的应用程序来说可能过于冗长,但为了完整起见将其包括在内。

    var git = spawn('git', ['push', 'origin', 'master']);
    ...
    git.stderr.pipe(process.stderr);
    git.stdout.pipe(process.stdout);

关于node.js - 为什么我通过 spawn() 创建的 Node 子进程挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20792427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com