Utilisation child_process.execSync mais gardez la sortie de la console
Je voudrais utiliser le execSync
méthode qui a été ajouté dans NodeJS 0.12 mais encore de la sortie dans la fenêtre de la console à partir de laquelle j'ai couru le Nœud de script.
E. g. si je lance un NodeJS script a la ligne suivante, j'aimerais voir la sortie complète de la commande rsync "live" à l'intérieur de 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 pouvais l'impression que la console après l'exécution, mais de cette façon je n'ai pas de "live" de sortie...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez passer à la les parents stdio pour le processus de l'enfant si c'est ce que vous voulez:
[0,1,2]
j'ai utilisé'inherit'
, ce qui est équivalent à[process.stdin, process.stdout, process.stderr]
ou[0,1,2]
comme par docsoptions.stdio
de la documentation: nodejs.org/api/child_process.html#child_process_options_stdio.toString()
.{stdio:'inherit'}
, vous devez ajouter .toString() et ensuite appeler la console.journal manuellement avec le résultat. En outre, il n'a même pas répondre aux questions exigence de voir la sortie de la commande "live". Je ne pense pas que c'est "plus simple", en fait, je ne pense pas que c'est plus simple à tous.Vous pouvez simplement utiliser
.toString()
.Cela a été testé sur le Nœud
v8.5.0
, je ne suis pas sûr que sur les précédentes versions. Selon @etov, il ne fonctionne pas surv6.3.1
- je ne suis pas sûr à ce sujet entre les deux..execSync()
jette unError
instance.Sauf si vous rediriger stdout et stderr que l'on a accepté de répondre à l'indique, ce n'est pas possible avec execSync ou spawnSync. Sans rediriger stdout et stderr ceux uniquement les commandes de retour stdout et stderr lorsque la commande est terminée.
Pour ce faire sans rediriger stdout et stderr, vous allez avoir besoin d'utiliser de spawn pour ce faire, mais c'est assez simple:
J'ai utilisé une commande ls que de manière récursive les listes des fichiers de sorte que vous pouvez le tester rapidement. Frayer prend comme premier argument le nom de l'exécutable que vous essayez d'exécuter et comme deuxième argument elle prend un tableau de chaînes représentant de chaque paramètre que vous souhaitez passer à celui de l'exécutable.
Toutefois, si vous êtes fixé sur l'utilisation de execSync et ne peut pas rediriger stdout ou stderr pour une raison quelconque, vous pouvez ouvrir un autre terminal comme xterm et passer une commande comme:
Cela vous permettra de voir ce que votre commande est en train de faire dans le nouveau terminal, mais encore l'appel synchrone.