Electron中Browser.ExecJS调用exec如何返回stdout而非返回值0
原因说明
child_process.exec 属于异步回调式API,代码同步执行完成时返回的是ChildProcess实例,转换为原始值就是获取到的0,回调函数内的逻辑会在子进程执行完成后才异步触发,无法被同步执行的Browser.ExecJS捕获返回值。
重构方案(优先推荐,兼容现有同步调用逻辑)
直接使用child_process提供的同步执行API execSync,和你之前使用的username.sync()逻辑完全一致,Browser.ExecJS可以直接拿到返回结果:
// 直接作为Browser.ExecJS的入参即可 require('child_process').execSync(`jq -r '.next_var' /tmp/eventsheet.json`).toString().trim()
带错误处理的兼容版本
如果需要覆盖命令执行出错的场景,可以补充try catch逻辑:
(() => { try { return require('child_process').execSync(`jq -r '.next_var' /tmp/eventsheet.json`).toString().trim() } catch (e) { // 出错时返回错误信息,可根据业务需求调整返回值 return `exec error: ${e.message}` } })()
可选异步方案(仅适用于Browser.ExecJS支持Promise自动解包的场景)
(async () => { const { promisify } = require('util') const exec = promisify(require('child_process').exec) try { const { stdout } = await exec(`jq -r '.next_var' /tmp/eventsheet.json`) return stdout.trim() } catch (e) { return `exec error: ${e.message}` } })()
内容的提问来源于stack exchange,提问作者dani 'SO learn value newbies'
相关产品推荐
相关产品推荐

