Chaque langue a ses propres avantages. Il se combine avec ses propres forces pour exécuter le programme plus efficacement ou utilise la méthode d'implémentation plus simple. NodeJS utilise des processus enfants pour appeler des commandes ou des fichiers système. Le document est affiché sur http://nodejs.org/api/child_process.html. Le sous-processus NodeJS fournit des interfaces importantes pour interagir avec le système. Ses principales API incluent: les interfaces de sortie standard de l'entrée, de sortie standard et d'erreur standard.
Le processus d'enfant NodeJS fournit des interfaces importantes pour interagir avec le système, et ses principales API sont:
Interfaces pour les entrées standard, sortie standard et sortie d'erreur standard
child.stdin obtient une entrée standard
child.stout obtient une sortie standard
child.stderr obtient une sortie d'erreur standard
Obtenez le PID du processus de l'enfant: Child.pid
Fournir une méthode pour générer des processus enfants: child_process.spawn (cmd, args = [], [options])
Fournir une méthode pour exécuter directement les commandes système: child_process.exec (cmd, [options], rappel)
Fournir une méthode pour appeler le fichier de script: child_process.execfile (fichier, [args], [options], [rappel])
Fournir une méthode pour tuer le processus: child.kill (signal = 'sigterm')
Il est très intéressant d'utiliser des exemples pour en faire l'expérience, haha ~~
1. Utilisez le processus enfant pour appeler les commandes système (obtenir une utilisation de la mémoire du système)
Créez un nouveau fichier Nodejs nommé cmd_spawn.js, le code est le suivant:
La copie de code est la suivante:
var spawn = require ('child_process'). Spawn;
free = spawn ('free', ['-m']);
// capturer la sortie standard et l'imprimer à la console
free.stout.on ('data', fonction (data) {
console.log ('standard output: / n' + data);
});
// capturer la sortie d'erreur standard et l'imprimer à la console
free.stderr.on ('data', fonction (data) {
Console.log ('Standard Error Sortie: / N' + Data);
});
// Enregistrer l'événement de fermeture du processus d'enfant
free.on ('exit', fonction (code, signal) {
Console.log ('Child Process Eixt, sortie:' + code);
});
Voici le résultat de l'exécution du script et de l'exécution directement de la commande «libre -m», exactement la même:
2. Exécuter les commandes système (child_process.exec ())
J'utilise toujours cela très souvent, et la fonction semble un peu plus puissante que celle ci-dessus. Par exemple, j'aime faire attention à la météo. Maintenant, je veux boucler l'interface météo pour renvoyer les données au format JSON. Peut-être que je veux l'exploiter, mais je vais l'imprimer ici et ne pas le faire fonctionner.
Créez un nouveau fichier Nodejs nommé cmd_exec.js:
La copie de code est la suivante:
var exec = require ('child_process'). exec;
var cmdStr = 'curl http://www.weather.com.cn/data/sk/101010100.html';
exec (cmdStr, fonction (err, stdout, stderr) {
if (err) {
Console.log ('Get Weather API Erreur:' + stderr);
} autre {
/ *
Le contenu de ce stdout est la chose que je recroqueville ci-dessus:
{"WeatherInfo": {"City": "Beijing", "CityId": "101010100", "Temp": "3", "WD": "Northwest Wind", "WS": "Level 3 "," SD ":" 23% "," WSE ":" 3 "," Time ":" 21:20 "," Isradar ":" 1 "," Radar ":" JC_RADAR_AZ9010_JB "," NJD ":" Non Live "," QY ":" 1019 "}}}}}}}}}}}}}}}}}}}
* /
var data = JSON.Parse (stdout);
console.log (données);
}
});
Faisons l'expérience du résultat directement de Curl et les scripts en cours d'exécution sont les mêmes:
3. Appelez le script shell qui passe par des paramètres (child_process.execfile ())
Pour cela, vous devez d'abord préparer un script shell. Par exemple, si je souhaite me connecter à un serveur pour modifier son mot de passe, je dois fournir une IP, un utilisateur, un nouveau PWD, un ancien PWD et créer un nouveau fichier de script de shell change_password.sh:
La copie de code est la suivante:
#! / bin / sh
Ip = ""
Name = ""
Mot de passe = ""
Newpassword = ""
Tandis que Getopts "H: U: P: N:" Arg #The Colon après que l'option indique que l'option nécessite des paramètres
faire
cas $ arg dans
H)
Ip = $ optarg
;;
U)
Name = $ optarg
;;
P)
Mot de passe = $ optarg
;;
N)
Newpassword = $ optarg
;;
?) # Quand il existe des options que vous ne reconnaissez pas, Arg est?
Echo "contient des paramètres inconnus"
sortie 1
;;
ESAC
fait
#Get userId en premier
UserId = `/ usr / bin / ipmitool -i lanplus -h $ ip -u $ name -p $ mot de passe Liste d'utilisateurs | Root grep | awk '{print $ 1}' `
# echo $ utilisateur
#Modifier le mot de passe selon l'utilisateur
/ usr / bin / ipmitool -i lanplus -h $ ip -u $ name -p $ mot de passe set utilisateur mot de passe $ userId $ newpassword
Ensuite, je prépare un fichier Nodejs pour appeler ce script shell, appelé file_changepwd.js:
La copie de code est la suivante:
var callFile = require ('child_process');
var ip = '1.1.1.1';
var username = 'test';
var mot de passe = 'pwd';
var newpassword = 'newpwd';
callFile.execfile ('change_password.sh', ['- h', ip, '-u', nom d'utilisateur, '-p', mot de passe, '-n', newpassword], null, function (err, stdout, stderr) {
rappel (err, stdout, stderr);
});
Il n'est pas pratique de publier les résultats en cours d'exécution ici, mais je peux utiliser la personnalité pour m'assurer qu'elle a été testée.
Après avoir lu ce qui précède, il n'y a en fait pas de suspense pour appeler les scripts Python, qui exécute essentiellement des commandes.
4. Appelez Python Script (Python Script lui-même passe par des paramètres)
Voici une distraction. Le paragraphe suivant est une brève explication des paramètres transmis sur Python:
La copie de code est la suivante:
# - * - codage: utf-8 - * -
'' '
Module requis: sys
Nombre de paramètres: LEN (SYS.Argv)
Nom du script: sys.argv [0]
Paramètre 1: SYS.Argv [1]
Paramètre 2: SYS.Argv [2]
'' '
importer sys
imprimer u "Nom du script:", sys.argv [0]
pour i dans la gamme (1, Len (sys.argv)): # Le paramètre commence à partir de 1
Imprimer u "Paramètre", i, sys.argv [i]
Résultats en cours:
Je prépare également un fichier NodeJS pour appeler ce script Python (j'ai apporté des modifications à py_test.py, voir ci-dessous), file_python.js:
La copie de code est la suivante:
var exec = require ('child_process'). exec;
var arg1 = 'bonjour'
var arg2 = 'jzhou'
exec ('python py_test.py' + arg1 + '' + arg2 + '', fonction (erreur, stdout, stderr) {
if (stdout.length> 1) {
console.log ('vous proposez des args:', stdout);
} autre {
console.log («vous n'offrez pas args»);
}
if (error) {
console.info ('stderr:' + stderr);
}
});
Le contenu de py_test.py est le suivant:
# - * - codage: utf-8 - * -
importer sys
Imprimer Sys.argv
Les résultats de l'opération sont les suivants:
C'est assez bon, et j'ai terminé un blog exquis pour 2014. Haha ~~