J'essaie d'utiliser les fonctions spawn
/exec
du module child_process
. Mais je remarque une étrange différence entre ce que je vois dans un vrai terminal et sur la ligne de commande. Voici un exemple:nœud child_process n'écrit pas tout sur stdout
Terminal:
$ redis-cli
127.0.0.1:6379> hmset hash name Jack age 33
OK
127.0.0.1:6379> hscan hash 0
1) "0"
2) 1) "name"
2) "Jack"
3) "age"
4) "33"
En Node.js:
const child = exec("redis-cli");
child.stdin.setDefaultEncoding("utf-8");
child.stdout.on("data", data => console.log(data.toString()));
child.stdin.write("hmset hash name Jack age 33\n"); // same as first command from cli example
await new Promise(r => setTimeout(r, 1000));
child.stdin.write("hscan hash 0\n"); // same as second command from cli example
await new Promise(r => setTimeout(r, 1000));
C'est ce qui est écrit à la console:
OK
0
name
Jack
age
33
Dans ce cas, les numéros 1)
, 2)
etc. sont manquants. Des idées comment je peux persuader child_process
de les écrire aussi à la console? Je suppose que cet exemple particulier est une bizarrerie de la façon dont redis-cli
est mis en œuvre, mais les données doivent aller certains où.
Les appels await new Promise(...)
sont juste pour s'assurer que la commande précédente est terminée pour cet exemple simple.