Heim >Web-Frontend >js-Tutorial >Methoden und Beispiele zum Aufrufen von Systembefehlen, Shell-Skripten und Python-Skripten in Nodejs_node.js

Methoden und Beispiele zum Aufrufen von Systembefehlen, Shell-Skripten und Python-Skripten in Nodejs_node.js

WBOY
WBOYOriginal
2016-05-16 16:22:433065Durchsuche

Jede Sprache hat ihre eigenen Vorteile. Wenn sie miteinander kombiniert werden, wird die Implementierungsmethode von Nodejs einfacher, um Systembefehle oder Dateien und Dokumente aufzurufen. nodejs.org/api/child_process.html. Der untergeordnete NodeJS-Prozess bietet wichtige Schnittstellen für die Interaktion mit dem System. Seine Haupt-APIs sind: Schnittstellen für Standardeingabe, Standardausgabe und Standardfehlerausgabe.

Der untergeordnete NodeJS-Prozess bietet eine wichtige Schnittstelle für die Interaktion mit dem System. Seine Haupt-APIs sind:

Schnittstellen für Standardeingabe, Standardausgabe und Standardfehlerausgabe

child.stdin erhält Standardeingabe

child.stdout erhält die Standardausgabe
child.stderr erhält eine Standardfehlerausgabe
Rufen Sie die PID des untergeordneten Prozesses ab: child.pid
Stellt eine Methode zum Generieren eines untergeordneten Prozesses bereit: child_process.spawn(cmd, args=[], [options])
Stellt eine Methode zum direkten Ausführen von Systembefehlen bereit: child_process.exec(cmd, [options], callback)
Stellt eine Methode zum Aufrufen von Skriptdateien bereit: child_process.execFile(file, [args], [options], [callback])
Stellt eine Methode zum Beenden des Prozesses bereit: child.kill(signal='SIGTERM')

Lassen Sie es uns anhand eines Beispiels nachfühlen, es ist sehr interessant, haha~~

1. Verwenden Sie untergeordnete Prozesse, um Systembefehle aufzurufen (Systemspeichernutzung zu ermitteln)

Erstellen Sie eine neue NodeJS-Datei mit dem Namen cmd_spawn.js mit dem folgenden Code:


Code kopieren Der Code lautet wie folgt:
var spawn = require('child_process').spawn;
free = spawn('free', ['-m']);
// Erfassen Sie die Standardausgabe und drucken Sie sie auf der Konsole

free.stdout.on('data', function (data) {
console.log('Standardausgabe:n' Daten);
});

// Erfassen Sie die Standardfehlerausgabe und drucken Sie sie auf der Konsole

free.stderr.on('data', function (data) {
console.log('Standardfehlerausgabe:n' Daten);
});

//Registrieren Sie das Ereignis zum Herunterfahren des untergeordneten Prozesses

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

Das Folgende sind die Ergebnisse der Ausführung dieses Skripts und der direkten Ausführung des Befehls „free -m“, die genau gleich sind:

2. Systembefehl ausführen (child_process.exec())

Ich benutze dieses Gerät immer noch sehr oft und seine Funktionen fühlen sich etwas leistungsfähiger an als die oben genannten. Ich achte zum Beispiel gerne auf das Wetter. Jetzt möchte ich die Wetterschnittstelle umwandeln, um Daten im JSON-Format zurückzugeben. Vielleicht muss ich einige Vorgänge daran ausführen, damit ich sie ausdrucke und nicht betreibe.

Erstellen Sie eine neue NodeJS-Datei mit dem Namen cmd_exec.js:

Code kopieren Der Code lautet wie folgt:
var exec = require('child_process').exec; var cmdStr = 'curl http://www.weather.com.cn/data/sk/101010100.html';
exec(cmdStr, function(err,stdout,stderr){
If(err) {
console.log('Wetter-API-Fehler abrufen:' stderr);
} sonst {
          /*
Der Inhalt dieser Standardausgabe ist das, was ich oben dargelegt habe:
{"weatherinfo":{"city":Peking,"cityid":101010100, "temp": "3", "WD": "Nordwestwind", "WS": "Stufe 3", "SD ::23%,WSE:3,time:21:20,isRadar:1,Radar:JC_RADAR_AZ9010_JB,njd:Noch keine Live-Übertragung " ,"qy":"1019"}}
*/
        var data = JSON.parse(stdout);
console.log(data);
}
});


Nehmen wir an, dass das Ergebnis des direkten Einrollens und der Ausführung des Skripts dasselbe ist:

3. Rufen Sie das Shell-Skript auf und übergeben Sie Parameter (child_process.execFile())

Dazu muss ich zunächst ein Shell-Skript vorbereiten. Wenn ich beispielsweise eine Verbindung zu einem Server herstellen möchte, um dessen Passwort zu ändern, muss ich die IP, den Benutzer, das neue Passwort und das alte Passwort angeben und eine neue Shell-Skriptdatei „change_password“ erstellen .sh:

Code kopieren Der Code lautet wie folgt:

#!/bin/sh

IP=""
NAME=""
PASSWORT=""
NEWPASSWORD=""

while getopts "H:U:P:N:" arg #Der Doppelpunkt nach der Option zeigt an, dass die Option Parameter erfordert
tun
case $arg in
H)
IP=$OPTARG
;;
U)
NAME=$OPTARG
;;
             P)
                   PASSWORD=$OPTARG
;;
                N)
                 NEWPASSWORD=$OPTARG
;;
                  ?)  #Wenn es Optionen gibt, die nicht erkannt werden, lautet das Argument?
                  echo „Enthält unbekannte Parameter“
Ausgang 1
;;
      esac
fertig

#Get userid first
USERID=`/usr/bin/ipmitool -I lanplus -H $IP -U $NAME -P $PASSWORD Benutzerliste | # echo $USERID
#Passwort basierend auf Benutzer-ID ändern
/usr/bin/ipmitool -I lanplus -H $IP -U $NAME -P $PASSWORD vom Benutzer festgelegtes Passwort $USERID $NEWPASSWORD

Dann bereite ich eine NodeJS-Datei vor, um dieses Shell-Skript namens file_changepwd.js aufzurufen:

Code kopieren Der Code lautet wie folgt:
var callfile = require('child_process'); var ip = '1.1.1.1';
var Benutzername = 'test';
var passwort = 'pwd';
var newpassword = 'newpwd';

callfile.execFile('change_password.sh',['-H', ip, '-U', username, '-P', password, '-N', newpassword],null,function (err, stdout , stderr) { ​ callback(err, stdout, stderr);

});


Es ist nicht bequem, die Laufergebnisse hier zu veröffentlichen, aber ich kann persönlich garantieren, dass es getestet wurde.

Nachdem ich das oben Gesagte gelesen habe, besteht eigentlich kein Grund zur Spannung, das Python-Skript aufzurufen. Im Wesentlichen geht es darum, den Befehl auszuführen.

4. Rufen Sie das Python-Skript auf (das Python-Skript selbst übergibt Parameter)

Fügen Sie hier einen Exkurs ein. Der folgende Absatz ist eine kurze Erläuterung der in Python übergebenen Parameter:

# -*-coding:utf-8 -*-
'''
Erforderliches Modul: sys
Anzahl der Parameter: len(sys.argv)
Skriptname: sys.argv[0]
Parameter 1: sys.argv[1]
Parameter 2: sys.argv[2]
'''
Importsystem
print u"script name:", sys.argv[0]
for i in range(1, len(sys.argv)): #Die Parameter hier beginnen bei 1
Drucken Sie u"parameter", i, sys.argv[i]


Laufergebnis:

Ich werde auch eine NodeJS-Datei vorbereiten, um dieses Python-Skript aufzurufen (ich habe Änderungen an py_test.py vorgenommen, siehe unten), file_python.js:

Code kopieren Der Code lautet wie folgt:

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~~

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn