我试图从我的Node应用程序运行ripgrep并看到child_process.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;
});
});
}
我只得到"产生包装"在控制台中,没有其他事件。我从未在其他二进制文件中看到这种行为,也许它与ripgrep
有关,但仍然不应该至少得到Node的一些提示吗?关于如何调试这个的任何建议?
答案 0 :(得分:0)
这是由ripgrep等待输入引起的,这对我来说并不明显(在命令行上,它只是直接执行)。详情请见https://github.com/BurntSushi/ripgrep/issues/410