【问题标题】:child_process.spawn doesn't emit any eventschild_process.spawn 不发出任何事件
【发布时间】:2017-10-15 15:09:52
【问题描述】:

我正在尝试从我的 Node 应用程序运行 ripgrep 并看到 child_process.spawn 的奇怪行为:没有任何事件触发并且应用程序永远不会完成(卡在 spawn 调用中的某处):

import { spawn } from 'child_process';

async function run() {
    await spawnWrapper('rg', ['-F', '"demo"'], { cwd: __dirname });
}

export function spawnWrapper(command, args, options) {
    return new Promise((resolve, reject) => {
        let stdout = '';
        let stderr = '';
        const child = spawn(command, args, options);
        console.log('spawn wrapper');

        child.on('close', (code, signal) => {
            console.log('close');
            resolve({ code, signal, stdout, stderr });
        });

        child.on('error', (error) => {
            console.log('error');
            (error as any).stderr = stderr;
            reject(error);
        });

        child.on('exit', (code, signal) => {
            console.log('exit');
            resolve({ code, signal, stdout, stderr });
        });

        child.stdout.setEncoding('utf8');
        child.stderr.setEncoding('utf8');

        child.stdout.on('data', (data) => {
            console.log('stdout data');
            stdout += data;
        });

        child.stderr.on('data', (data) => {
            console.log('stderr data');
            stderr += data;
        });
    });
}

我只在控制台中得到“spawn wrapper”,没有其他事件。我从来没有在其他二进制文件中看到过这种行为,也许是ripgrep 的问题,但我不应该至少得到 Node 的一些提示吗?有关如何调试此问题的任何建议?

【问题讨论】:

  • 您可以使用本地调试器并将其设置为在所有 JS 异常上中断,它应该会向您显示代码失败的原因。
  • gist.github.com/Stuk/6226938 这个围绕 child_process 的示例包装器没有使用 close 事件,也许没有必要?这是此类 github.com/mgenware/promised-spawn 的另一个示例

标签: node.js child-process spawn


【解决方案1】:

这是由 ripgrep 等待输入引起的,这对我来说并不明显(在命令行上,它只是立即执行)。详情在这里:https://github.com/BurntSushi/ripgrep/issues/410

【讨论】:

  • 我用的是mac。
  • 您实际为解决此问题所做的工作。我正面临这个问题,并花了很多时间来解决这个问题。让我知道您为解决此问题采取了哪些措施
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 2019-06-13
  • 2018-04-07
  • 2018-05-25
  • 2016-01-04
相关资源
最近更新 更多