Maison > interface Web > js tutoriel > le corps du texte

Méthodes et exemples d'appel de commandes système, de scripts Shell et de scripts Python dans Nodejs_node.js

WBOY
Libérer: 2016-05-16 16:22:43
original
3040 Les gens l'ont consulté

Chaque langage a ses propres avantages. Lorsqu'il est combiné les uns avec les autres, le programme s'exécutera plus efficacement ou selon la méthode d'implémentation la plus simple, utilise des processus enfants pour appeler des commandes système ou des fichiers et des documents. nodejs.org/api/child_process.html. Le processus enfant NodeJS fournit des interfaces importantes pour interagir avec le système. Ses principales API sont : des interfaces pour l'entrée standard, la sortie standard et la sortie d'erreur standard.

Le processus enfant NodeJS fournit une interface importante pour interagir avec le système. Ses principales API sont :

Interfaces pour entrée standard, sortie standard et sortie d'erreur standard

child.stdin obtient une entrée standard

child.stdout obtient une sortie standard
child.stderr obtient une sortie d'erreur standard
Récupérez le PID du processus enfant : child.pid
Fournit une méthode pour générer un processus enfant : child_process.spawn(cmd, args=[], [options])
Fournit une méthode pour exécuter directement les commandes système : child_process.exec(cmd, [options], callback)
Fournit une méthode pour appeler les fichiers de script : child_process.execFile(file, [args], [options], [callback])
Fournit une méthode pour tuer le processus : child.kill(signal='SIGTERM')

Prenons un exemple pour le ressentir, c'est très intéressant, haha~~

1. Utilisez des processus enfants pour appeler des commandes système (obtenir l'utilisation de la mémoire système)

Créez un nouveau fichier nodejs nommé cmd_spawn.js avec le code suivant :


Copier le code Le code est le suivant :
var spawn = require('child_process').spawn;
free = spawn('free', ['-m']);
// Capturez la sortie standard et imprimez-la sur la console

free.stdout.on('data', function (data) {
console.log('sortie standard:n' données);
});

// Capturez la sortie d'erreur standard et imprimez-la sur la console

free.stderr.on('data', function (data) {
console.log('sortie d'erreur standard : n' données);
});

//Enregistrer l'événement d'arrêt du processus enfant

free.on('exit', function (code, signal) {
console.log('processus enfant eixt,exit:' code);
});

Voici les résultats de l'exécution de ce script et de l'exécution directe de la commande 'free -m', qui sont exactement les mêmes :

2. Exécuter la commande système (child_process.exec())

J'utilise encore celui-ci très souvent, et ses fonctions me semblent un peu plus puissantes que celles ci-dessus. Par exemple, j'aime faire attention à la météo. Maintenant, je veux recourber l'interface météo pour renvoyer les données au format json. Peut-être que je dois effectuer certaines opérations dessus, donc je vais l'imprimer et ne pas l'utiliser.

Créez un nouveau fichier nodejs nommé cmd_exec.js :

Copier le code Le code est le suivant :
var exec = require('child_process').exec
var cmdStr = 'curl http://www.weather.com.cn/data/sk/101010100.html';
exec(cmdStr, fonction(err,stdout,stderr){
Si (erreur) {
console.log('obtenir l'erreur de l'API météo :' stderr);
} autre {
          /*
Le contenu de cette sortie standard est ce que j'ai décrit ci-dessus :
{"weatherinfo":{"city":"Pékin","cityid":"101010100","temp":"3","WD":"Vent du Nord-Ouest","WS":"Niveau 3","SD ":"23%","WSE":"3","time":"21:20","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB","njd":"Pas encore de diffusion en direct " ,"qy":"1019"}}
*/
        var data = JSON.parse(stdout);
console.log(données);
>
});

Pensons que le résultat du curling direct et de l'exécution du script est le même :

3. Appelez le script shell en passant les paramètres (child_process.execFile())

Cela nécessite d'abord de préparer un script shell. Par exemple, si je souhaite me connecter à un serveur pour changer son mot de passe, je dois fournir l'adresse IP, l'utilisateur, le nouveau mot de passe, l'ancien mot de passe et créer un nouveau fichier de script shell change_password. .sh :

Copier le code Le code est le suivant :

#!/bin/sh

IP=""
NOM=""
MOT DE PASSE=""
NOUVEAU MOT DE PASSE=""

while getopts "H:U:P:N:" arg #Les deux points après l'option indiquent que l'option nécessite des paramètres
faire
cas $arg dans
H)
IP=$OPTARG
;;
U)
NOM=$OPTARG
;;
             P)
                   MOT DE PASSE=$OPTARG
;;
                N)
                 NEWPASSWORD=$OPTARG
;;
                  ?)  #Quand certaines options ne sont pas reconnues, l'argument est ?
                  echo "Contient des paramètres inconnus"
sortie 1
;;
      esac
fait

#Obtenez d'abord l'ID utilisateur
USERID=`/usr/bin/ipmitool -I lanplus -H $IP -U $NAME -P $PASSWORD liste d'utilisateurs | grep root | # echo $USERID
#Changer le mot de passe en fonction de l'ID utilisateur
/usr/bin/ipmitool -I lanplus -H $IP -U $NAME -P $PASSWORD mot de passe défini par l'utilisateur $USERID $NEWPASSWORD

Ensuite je prépare un fichier nodejs pour appeler ce script shell, appelé file_changepwd.js :

Copier le code Le code est le suivant :
var callfile = require('child_process');
var ip = '1.1.1.1';
var nom d'utilisateur = 'test';
var mot de passe = 'pwd';
var nouveau mot de passe = 'nouveau mot de passe';
callfile.execFile('change_password.sh',['-H', ip, '-U', nom d'utilisateur, '-P', mot de passe, '-N', nouveau mot de passe],null,fonction (err, stdout , stderr) {

​ rappel(err, stdout, stderr);
});

Il n'est pas pratique de publier les résultats en cours ici, mais je peux personnellement garantir qu'ils ont été testés.

Après avoir lu ce qui précède, il n'y a en fait aucun suspense quant à l'appel du script python. Il s'agit essentiellement d'exécuter la commande.

4. Appelez le script python (le script python lui-même passe des paramètres)

Insérez ici une digression. Le paragraphe suivant est une brève explication des paramètres passés en python :

Copier le code Le code est le suivant :
# -*-coding: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 le système
imprimez votre "nom du script :", sys.argv[0]
for i in range(1, len(sys.argv)): #Les paramètres ici commencent à partir de 1
Imprimez votre "paramètre", i, sys.argv[i]

Résultat de l'exécution :

Je vais également préparer un fichier nodejs pour appeler ce script python (j'ai apporté des modifications à py_test.py, voir ci-dessous), file_python.js :

Copier le code Le code est le suivant :

var exec = require('child_process').exec;
var arg1 = 'bonjour'
var arg2 = 'jzhou'
exec('python py_test.py ' arg1 ' ' arg2 ' ',function(erreur,stdout,stderr){
Si(stdout.length >1){
console.log('vous proposez args:',stdout);
} autre {
console.log('vous ne proposez pas d'arguments');
>
Si(erreur) {
console.info('stderr : 'stderr);
>
});

Le contenu de py_test.py est le suivant :
# -*-coding:utf-8 -*-
importer le système
imprimer sys.argv

Les résultats en cours d'exécution sont les suivants :

C'est toujours très bien, et j'ai réalisé un autre blog exquis pour 2014. Haha~~

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!