[英]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上卻無法獲得相同的結果
我嘗試了很多事情:
我做了一個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.