Je voudrais utiliser la execSync
méthode qui a été ajoutée dans NodeJS 0.12 mais j'ai toujours la sortie dans la fenêtre de la console à partir de laquelle j'ai exécuté le script Node.
Par exemple, si j'exécute un script NodeJS qui a la ligne suivante, j'aimerais voir la sortie complète de la commande rsync "live" dans la console:
require('child_process').execSync('rsync -avAXz --info=progress2 "/src" "/dest"');
Je comprends que execSync
renvoie la sortie de la commande et que je pourrais l'imprimer sur la console après l'exécution mais de cette façon je n'ai pas de sortie "live" ...
node.js
child-process
suamikim
la source
la source
[0,1,2]
j'ai utilisé'inherit'
, ce qui équivaut à[process.stdin, process.stdout, process.stderr]
ou[0,1,2]
selon les documentsoptions.stdio
documentation: nodejs.org/api/child_process.html#child_process_options_stdio{stdio:'inherit'}
, vous devez ajouter .toString () puis appeler console.log manuellement avec le résultat. De plus, il ne répond même pas à l'exigence de voir la sortie de la commande "en direct". Je ne pense pas que ce soit "beaucoup plus simple", en fait je ne pense pas que ce soit plus simple du tout.Vous pouvez simplement utiliser
.toString()
.Cela a été testé sur Node
v8.5.0
, je ne suis pas sûr des versions précédentes. Selon @etov , cela ne fonctionne pasv6.3.1
- je ne suis pas sûr de l'intervalle.la source
.execSync()
lance uneError
instance.À moins que vous ne redirigiez stdout et stderr comme le suggère la réponse acceptée, cela n'est pas possible avec execSync ou spawnSync. Sans rediriger stdout et stderr, ces commandes ne renvoient stdout et stderr que lorsque la commande est terminée.
Pour ce faire sans rediriger stdout et stderr, vous devrez utiliser spawn pour le faire, mais c'est assez simple:
J'ai utilisé une commande ls qui répertorie les fichiers de manière récursive afin que vous puissiez le tester rapidement. Spawn prend comme premier argument le nom de l'exécutable que vous essayez d'exécuter et comme deuxième argument, il prend un tableau de chaînes représentant chaque paramètre que vous voulez passer à cet exécutable.
Cependant, si vous êtes configuré pour utiliser execSync et que vous ne pouvez pas rediriger stdout ou stderr pour une raison quelconque, vous pouvez ouvrir un autre terminal comme xterm et lui passer une commande comme ceci:
Cela vous permettra de voir ce que fait votre commande dans le nouveau terminal tout en conservant l'appel synchrone.
la source