Exécuter et obtenir la sortie d'une commande shell dans node.js
Dans un node.js j'aimerais trouver un moyen pour obtenir la sortie d'un Unix terminal de commande. Est-il possible de faire cela?
function getCommandOutput(commandString){
//now how can I implement this function?
//getCommandOutput("ls") should print the terminal output of the shell command "ls"
}
- Est-ce un doublon, ou faut-il décrire quelque chose de complètement différent? stackoverflow.com/questions/7183307/...
- Ceci pourraient vous intéresser.
Vous devez vous connecter pour publier un commentaire.
C'est la façon dont je le fais dans un projet sur lequel je travaille actuellement.
Exemple: Récupérer les utilisateurs de git
stdout
si il y a une erreur. Espérons déterministe et documenté.Vous êtes à la recherche pour child_process
Comme l'a souligné Renato, il y a quelques synchrone exec paquets de trop, voir sync-exec qui pourraient être plus ce que vous cherchez. Gardez à l'esprit que, node.js est conçu pour être un seul thread de réseau de haute performance serveur, donc si c'est ce que vous êtes à la recherche de l'utiliser pour, rester à l'écart de synchronisation-exec un peu des trucs, sauf si vous êtes en utilisant uniquement lors du démarrage ou quelque chose.
Sync
méthodes disponibles nativement, même si à mon humble avis, il faut éviter deexec-sync
, comme je veux être en mesure d'exécuter la commande asynchrone..exec
partie sur " require('child_process').exec;`Si vous êtes à l'aide d'un noeud au plus tard 7.6 et vous n'aimez pas le rappel de style, vous pouvez également utiliser un nœud-util de
promisify
fonction avecasync /await
pour obtenir des commandes shell qui lire proprement. Voici un exemple de la accepté de répondre, à l'aide de cette technique:Cela a aussi l'avantage de renvoyer le refus de la promesse sur l'échec de commandes, qui peuvent être manipulés avec
try /catch
à l'intérieur de la async code.{ stdout: string, stderr: string }
comme un résultat de laawait exec(...)
return { name: name.stdout.trim(), email: email.stdout.trim() }
.Merci à Renato réponse, j'ai créé vraiment un exemple de base:
Il vous suffit d'imprimer votre nom d'utilisateur git 🙂
Exigences
Cela nécessitera Node.js 7 ou plus tard avec un support pour des Promesses et Async/Await.
Solution
Créer une fonction wrapper qui tirent parti de promesses pour contrôler le comportement de la
child_process.exec
commande.Explication
À l'aide de promesses et d'une fonction d'asynchrone, vous pouvez reproduire le comportement d'un shell retour de la sortie, sans tomber dans un rappel de l'enfer et avec une très soignée de l'API. À l'aide de la
await
mot-clé, vous pouvez créer un script qui se lit facilement, bien que toujours être en mesure de faire le travail dechild_process.exec
fait.Exemple de Code
Utilisation
Exemple De Sortie
Essayer en ligne.
Repl.il.
Ressources externes
Promesses.
child_process.exec
.Node.js support de table.