簡體   English   中英

無法從Windows上的Node.js腳本生成`gcloud app deploy`

[英]Can't spawn `gcloud app deploy` from a Node.js script on Windows

我正在構建一個Electron應用程序(Node.js),該應用程序需要從具有實時反饋(stdin / stdout / stderr)的應用程序中生成gcloud app deploy

child_process迅速從child_process切換為child_process因為在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()
  • execa.shell()
  • 選項殼:真
  • 我嘗試將maxBuffer設置為1GB(以防萬一)
  • 它適用於detached:true但我無法在應用程序中實時讀取stdout / stderr,因為它提示一個新的cmd.exe而沒有與Node.js應用程序進行交互
  • 很多child_process變體。

我做了一個GIST,以顯示我在Windows上使用基本的子進程腳本進行的一些測試所得到的響應: https : //gist.github.com/thyb/9b53b65c25cd964bbe962d8a9754e31f

我還在execa存儲庫上打開了一個問題: https : //github.com/sindresorhus/execa/issues/97

有人已經遇到這個問題了嗎? 我四處搜尋,除了沒有解決這個問題的Reddit線程外,沒有其他希望。

在后台,gcloud.cmd正在運行python腳本。 在閱讀了有關ChildProcess / Python和Windows的大量Node.js問題之后,我落入了這個線程: https : //github.com/nodejs/node-v0.x-archive/issues/8298

關於從Node.js子進程運行Python腳本存在一些已知問題。 他們在此評論中談到python的無緩沖選項。 通過添加-u選項更新gcloud.cmd的shell腳本后,我注意到一切都按預期工作

注釋說明了如何將此選項設置為環境變量(不直接修改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
  })
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM