"gcloud app deploy" kann nicht aus einem Node.js-Skript unter Windows generiert werden

8

Ich baue eine Electron -Anwendung (Node.js), die gcloud app deploy aus der Anwendung mit Echtzeit-Feedback erzeugen muss ( stdin / stdout / stderr).

Ich wechselte schnell von child_process zu execa , weil ich unter Mac OS X einige Probleme mit dem child_process-Puffer hatte, der begrenzt ist bis 200kb (und gcloud app deploy sendet einen großen Teil der Zeichenfolge & gt; 200kb, der den Befehl zum Absturz bringt).

Nun, mit execa scheint alles unter OSX normal zu funktionieren, aber nicht unter Windows.

Der Code sieht ungefähr so ​​aus:

%Vor%

Dieser Code funktioniert perfekt unter Mac OS X, obwohl ich unter Windows nicht das gleiche Ergebnis habe

Ich habe viel versucht:

  • execa ()
  • execa.shell ()
  • Optionen shell: true
  • Ich habe versucht MaxBuffer zu 1GB (nur für den Fall)
  • Es funktioniert mit detached: true ABER ich kann nicht stdout / stderr in Echtzeit in der Anwendung lesen, da es eine neue cmd.exe ohne Interaktion mit der Node.js-Anwendung
  • auffordert
  • Viele child_process-Varianten.

Ich habe einen GIST erstellt, um die Antworten auf einige Tests zu zeigen, die ich unter Windows mit grundlegenden Child Process-Skripten durchgeführt habe: Ссылка

Ich habe auch ein Problem mit execa repository geöffnet: Ссылка

Hat schon jemand dieses Problem? Ich habe gesucht und nichts gefunden, was vielversprechend ist, außer diesem Reddit-Thread , der dies nicht löst Problem.

    
Thibaud Arnault 29.06.2017, 08:42
quelle

1 Antwort

1

Hinter der Szene führt gcloud.cmd ein Python-Skript aus. Nach dem Lesen von Tonnen von Node.js Problem mit ChildProcess / Python und Windows, fiel ich auf diesen Thread: Ссылка

Es gibt ein bekanntes Problem beim Ausführen von Python-Skripten aus einem untergeordneten Node.js-Prozess. Sie sprechen in diesem Kommentar über eine ungepufferte Option für Python. Nachdem ich das Shell-Skript in gcloud.cmd aktualisiert habe, indem ich die Option -u hinzugefügt habe, ist mir aufgefallen, dass alles wie erwartet funktioniert

In diesem Kommentar wird erläutert, wie diese Option als Umgebung festgelegt wird Variable (um das Windows-Shell-Skript nicht direkt zu ändern): Ссылка

Das Hinzufügen von PYTHONUNBUFFERED zur Umgebungsvariablen behebt dieses Problem!

%Vor%     
Thibaud Arnault 08.07.2017, 02:33
quelle