Question Force Node.js à vider les écritures dans les processus enfants


Je donne naissance à un processus enfant comme celui-ci:

var child = require('child_process');
var proc = child.spawn('python', ['my_script.py', '-p', 'example']);

J'ai également paramétré quelques manipulations de données:

proc.stdin.setEncoding('utf8');
proc.stdout.setEncoding('utf8');
proc.stderr.setEncoding('utf8');

proc.stdout.on('data', function (data) {
  console.log('out: ' + data);
});

proc.stderr.on('data', function (data) {
  console.log('err: ' + data);
});

proc.on('close', function (code) {
  console.log('subprocess exited with status ' + code);
  proc.stdin.end();
});

Mon script Python lit les lignes de stdin et pour chaque ligne effectue des opérations et imprime à stdout. Cela fonctionne très bien dans le shell (j'écris une ligne et j'obtiens immédiatement la sortie) mais quand je le fais dans Node:

for (var i = 0; i < 10; i++) {
  proc.stdin.write('THIS IS A TEST\n');
}

Je n'ai rien.

Je dois le réparer en appelant proc.stdin.end() mais cela met également fin au processus fils (que je veux conserver en arrière-plan, en continu des données).

J'ai également déclenché une vidange remplissant le tampon avec beaucoup d'écritures, mais ce n'est pas vraiment une option.

Est-il possible de vider manuellement le flux?


10
2018-06-17 03:18


origine


Réponses:


Vous ne videz pas la sortie de Python après l'impression. J'ai eu un problème similaire et @Alfe a répondu à ma question. Regarde ça:

Flux de sortie du processus enfant en mode fluide


2
2017-09-17 12:19