You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:57:01