Heim >Web-Frontend >js-Tutorial >Methoden und Beispiele zum Aufrufen von Systembefehlen, Shell-Skripten und Python-Skripten in Nodejs_node.js
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:
free.stdout.on('data', function (data) {
console.log('Standardausgabe:n' Daten);
});
free.stderr.on('data', function (data) {
console.log('Standardfehlerausgabe:n' Daten);
});
free.on('exit', function (code, signal) {
console.log('child Process eixt ,exit:' code);
});
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:
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:
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
});
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:
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:
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~~