Node.js子进程未给出任何响应或任何错误 [英] Node.js child process is not giving any response or any error

查看:76
本文介绍了Node.js子进程未给出任何响应或任何错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正尝试在我的Mac机器上运行的node.js应用程序中使用Ripgrep。(VS代码扩展)。

我尝试了risgrep-js NPM Libray,但没有任何响应,应用程序将进入挂起状态。

我尝试进行调试,发现riggrep-js只是运行rg命令并获取其结果,然后以格式化的方式返回结果。 我尝试运行简单的命令,如

rg test .

我拿到结果了。

但是,当我通过node.js Child_process运行时,没有给出任何响应。以下是我正在运行的代码。

// index.js
const cp = require('child_process');


let p = cp.spawn('rg', ['test'], { cwd: './'});
p.stdout.on('data', data => {
    console.log('stdout: ' + data.toString());
});

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

p.on('close', code => {
    console.log('closed: ' + code);
});

不确定可能是什么原因。我绕过这个问题child_process.spawn doesn't emit any events 这与我的使用案例相匹配,在我的用例中,Ripgrep不起作用。但目前还不太清楚到底采取了什么措施来解决这个问题。向社区寻求帮助。

为了重现这一点,请使用上面的代码创建index.js,并使用节点node index.js

运行

推荐答案

感谢帮助解决此问题的@BurntSushi5。总而言之,我们有两种选择来解决这个问题。

解决方案1:忽略标准输入

    const cp = require('child_process');
    let p = cp.spawn('rg', ['test'], { cwd: './'
    ,stdio: ['ignore', 'pipe', 'pipe']
    });
    p.stdout.on('data', data => {
        console.log('stdout: ' + data.toString());
    });

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

    p.on('close', code => {
        console.log('closed: ' + code);
    }); 

解决方案2:传递。/

    const cp = require('child_process');
    let p = cp.spawn('rg', ['test','./'], { cwd: '.'});
    p.stdout.on('data', data => {
        console.log('stdout: ' + data.toString());
    });

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

    p.on('close', code => {
        console.log('closed: ' + code);
    }); 

这篇关于Node.js子进程未给出任何响应或任何错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆