Node.js子进程未给出任何响应或任何错误 [英] Node.js child process is not giving any response or any error
本文介绍了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屋!
查看全文