9

私はリアルタイムフィードバック(stdin/stdout/stderr)でアプリケーションからgcloud app deployを起動する必要があるElectronアプリケーション(Node.js) 。WindowsのNode.jsスクリプトから `gcloud app deploy`を起動できない

私は200キロバイトに制限されてchild_processバッファを搭載したMac OS X上でいくつかの問題を持っていたので、私は急速にexecachild_processから切り替え(とgcloud app deployは、文字列> 200キロバイトクラッシュコマンドのいくつかの大きな塊を送ります)。

今、execaで、すべてがOSXでは正常に動作するようですが、Windowsでは正常に動作しているようです。

:私は事の多くを試してみました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を行っています

誰かがすでにこの問題を抱えていますか?私はこの問題を解決しないreddit threadを除いて、何かを探し回って有望なものは見つけられませんでした。

答えて

2

シーンの後ろに、gcloud.cmdはpythonスクリプトを実行しています。私はこのスレッドに落ち込んでいました:https://github.com/nodejs/node-v0.x-archive/issues/8298

Node.jsの子プロセスからPythonスクリプトを実行することに関する既知の問題があります。 彼らはこのcommentで、Pythonのバッファリングされていないオプションについて話します。予想通り-uオプションを追加することにより、gcloud.cmdでシェルスクリプトを更新した後、私は

すべてが働いていた気づいこのcommentは(直接Windowsのシェルスクリプトを変更しないように)環境変数として、このオプションを設定する方法について説明します。https://docs.python.org/2/using/cmdline.html#envvar-PYTHONUNBUFFERED

環境変数にを追加すると、この問題が修正されます。

execa(fullpath, ['app', 'deploy'], { 
    cwd: appPath, 
    env: Object.assign({}, process.env, { 
    PYTHONUNBUFFERED: true 
    }) 
}) 
関連する問題