Dans un node.js, j'aimerais trouver un moyen d'obtenir la sortie d'une commande de terminal Unix. Y a-t-il un moyen de faire ça?
function getCommandOutput(commandString){
// now how can I implement this function?
// getCommandOutput("ls") should print the terminal output of the shell command "ls"
}
node.js
shell
command-line-interface
Vert Anderson
la source
la source
Réponses:
C'est comme ça que je le fais dans un projet sur lequel je travaille actuellement.
Exemple: récupération d'un utilisateur git
la source
stdout
s'il y a une erreur. Espérons que déterministe et documenté.Vous recherchez child_process
Comme l'a souligné Renato, il existe maintenant des packages exécutables synchrones , voir sync-exec qui pourrait être plus ce que vous recherchez. Gardez à l'esprit cependant que node.js est conçu pour être un serveur réseau haute performance à thread unique, donc si c'est pour cela que vous cherchez à l'utiliser, évitez les trucs de sync-exec à moins que vous ne l'utilisiez uniquement au démarrage. ou quelque chose.
la source
Sync
méthodes disponibles en mode natif, même si à mon humble avis , cela devrait être évitéSi vous utilisez node plus tard que 7.6 et que vous n'aimez pas le style de rappel, vous pouvez également utiliser la
promisify
fonction de node-util avecasync / await
pour obtenir des commandes shell qui lisent proprement. Voici un exemple de réponse acceptée, en utilisant cette technique:Cela présente également l'avantage supplémentaire de renvoyer une promesse rejetée sur les commandes ayant échoué, qui peut être gérée à l'
try / catch
intérieur du code asynchrone.la source
{ stdout: string, stderr: string }
en conséquence pour leawait exec(...)
return { name: name.stdout.trim(), email: email.stdout.trim() }
.Grâce à Renato answer, j'ai créé un exemple très basique:
Il imprimera simplement votre nom d'utilisateur git global :)
la source
Exigences
Cela nécessitera Node.js 7 ou version ultérieure avec un support pour Promises et Async / Await.
Solution
Créez une fonction wrapper qui exploite les promesses pour contrôler le comportement de la
child_process.exec
commande.Explication
En utilisant des promesses et une fonction asynchrone, vous pouvez imiter le comportement d'un shell renvoyant la sortie, sans tomber dans un enfer de rappel et avec une API assez soignée. En utilisant le
await
mot - clé, vous pouvez créer un script qui se lit facilement, tout en restant en mesure de faire le travailchild_process.exec
.Exemple de code
Usage
Exemple de sortie
Essayez-le en ligne.
Repl.it .
Ressources externes
Des promesses .
child_process.exec
.Table de support Node.js .
la source