gpt4 book ai didi

node.js - 无法从 Windows 上的 Node.js 脚本生成 `gcloud app deploy`

转载 作者:可可西里 更新时间:2023-11-01 12:52:32 24 4
gpt4 key购买 nike

我正在构建一个 Electron应用程序 (Node.js) 需要从具有实时反馈 (stdin/stdout/stderr) 的应用程序生成 gcloud app deploy

我迅速从 child_process 切换到 execa因为我在 Mac OS X 上遇到了一些问题,child_process 缓冲区限制为 200kb(并且 gcloud app deploy 发送了一些大块的字符串 > 200kb,这导致命令崩溃)。

现在,有了 execa,一切似乎在 OSX 上都能正常工作,但在 Windows 上却不行。

代码看起来像这样:

let bin = `gcloud${/^win/.test(process.platform) ? '.cmd' : ''}`

//which: https://github.com/npm/node-which
which(bin, (err, fullpath) => {
let proc = execa(fullpath, ['app', 'deploy'], {
cwd: appPath
})
proc.stdout.on('data', data => {
parseDeploy(data.toString())
})
proc.stderr.on('data', data => {
parseDeploy(data.toString())
})
proc.then(() => {
...
}).catch(e => {
...
})
})

这段代码在 Mac OS X 上运行完美,而我在 Windows 上却没有相同的结果

我已经尝试了很多东西:

  • 执行器()
  • execa.shell()
  • 选项 shell:true
  • 我尝试将 maxBuffer 设为 1GB(以防万一)
  • 它适用于 detached:true 但我无法在应用程序中实时读取 stdout/stderr,因为它会在不与 Node.js 应用程序交互的情况下提示新的 cmd.exe
  • 很多 child_process 变体。

我制作了一个 GIST 来显示我在 Windows 上使用基本子进程脚本进行的一些测试得到的响应: https://gist.github.com/thyb/9b53b65c25cd964bbe962d8a9754e31f

我还在 execa 存储库上开了一个问题:https://github.com/sindresorhus/execa/issues/97

有人遇到过这个问题吗?我四处搜索,除了这个 reddit thread 没有发现任何有前途的东西。这并不能解决这个问题。

最佳答案

在后台,gcloud.cmd 正在运行一个 python 脚本。在阅读了大量有关 ChildProcess/Python 和 Windows 的 Node.js 问题后,我陷入了这个话题:https://github.com/nodejs/node-v0.x-archive/issues/8298

从 Node.js 子进程运行 Python 脚本存在一些已知问题。他们在这 comment 交谈关于 python 的无缓冲选项。通过添加 -u 选项更新 gcloud.cmd 中的 shell 脚本后,我注意到一切都按预期工作

comment说明如何将此选项设置为环境变量(不直接修改 Windows shell 脚本):https://docs.python.org/2/using/cmdline.html#envvar-PYTHONUNBUFFERED

因此将 PYTHONUNBUFFERED 添加到环境变量中可以解决此问题!

execa(fullpath, ['app', 'deploy'], {
cwd: appPath,
env: Object.assign({}, process.env, {
PYTHONUNBUFFERED: true
})
})

关于node.js - 无法从 Windows 上的 Node.js 脚本生成 `gcloud app deploy`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44820259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com