前提
这也是我工作中遇到的一个问题,通过child_process.exec()
去执行unzip -l
命令,直接报错。
问题
这是因为exec函数有个默认的缓冲区大小,大约是200KB,我们可以通过设置maxBuffer去解决问题,但不能彻底解决。因为仍不知道文件到底有多大,文件列表是不是能正常返回。
解决方案
spawn与exec的区别
child_process.spawn()
适合返回所有的数据,exec()
更多是返回一个执行的结果。
封装
static async childSpawnPromise(command:string, args: string[]) {
return new Promise<any>((resolve,reject)=>{
// unzip -l
const cmd = child_process.spawn(command, args, { shell: true })
const path = args[1]
cmd.on('data', (data) => {
resolve(data)
});
cmd.on('error', (data) => {
reject(`执行命令发生错误:err:${data}, command:${command}`)
});
})
}
这里的{shell: true}
是指定运行的环境,否则会报下图的错误,意思是找不到可执行的unzip命令。