Jede Sprache hat ihre eigenen Vorteile. Es kombiniert sich mit seinen eigenen Stärken, um das Programm effizienter auszuführen, oder verwendet, welche Implementierungsmethode einfacher ist. NodeJS verwendet untergeordnete Prozesse, um Systembefehle oder -dateien aufzurufen. Das Dokument wird unter http://nodejs.org/api/child_process.html angezeigt. Der NodeJS -Subprozess bietet wichtige Schnittstellen für die Interaktion mit dem System. Zu den Haupt -APIs gehören: Standardeingangs-, Standardausgabe- und Standardfehlerausgangsschnittstellen.
Der NodeJS -Kinderprozess bietet wichtige Schnittstellen für die Interaktion mit dem System, und seine Haupt -APIs sind:
Schnittstellen für Standardeingangs-, Standardausgabe- und Standardfehlerausgabe
Child.stdin erhalten Standardeingaben
Child.stdout erhält Standardausgabe
Child.stderr erhält Standardfehlerausgabe
Holen Sie sich die PID des Kinderprozesses: Kind.pid
Geben Sie eine Methode zur Generierung von untergeordneten Prozessen an: Child_process.spawn (cmd, args = [], [Optionen])
Geben Sie eine Methode zur direkten Ausführung von Systembefehlen an: Child_process.exec (CMD, [Optionen], Rückruf)
Geben Sie eine Methode an, um die Skriptdatei aufzurufen: Child_process.execFile (Datei, [Args], [Optionen], [Rückruf]).
Bieten Sie eine Methode zur Abtötung des Prozesses: Child.kill (Signal = 'Sigterm').
Es ist sehr interessant, Beispiele zu verwenden, um es zu erleben, haha ~~
1. Verwenden Sie den untergeordneten Prozess, um Systembefehle aufzurufen (Systemspeichernutzung abrufen).
Erstellen Sie eine neue NodeJS -Datei mit dem Namen cmd_spawn.js. Der Code lautet wie folgt:
Die Codekopie lautet wie folgt:
var spawn = required ('child_process'). Spawn;
Free = Spawn ('Free', ['-m']);
// Standardausgabe erfassen und in die Konsole drucken
Free.stdout.on ('Daten', Funktion (Daten) {
console.log ('Standardausgabe:/n' + Daten);
});
// Standardfehlerausgabe erfassen und in die Konsole drucken
Free.stderr.on ('Daten', Funktion (Daten) {
console.log ('Standardfehlerausgabe:/n' + Daten);
});
// Child Process Shutdown -Ereignis registrieren
Free.on ('exit', Funktion (Code, Signal) {
console.log ('Child Process EIXT, Beenden:' + Code);
});
Hier ist das Ergebnis des Ausführens des Skripts und des direkten Ausführens des Befehls 'Free -m', genau das gleiche:
2. Führen Sie Systembefehle aus (minese_process.exec ())
Ich benutze das immer noch sehr oft und die Funktion fühlt sich etwas leistungsfähiger an als die oben genannten. Zum Beispiel achte ich gerne auf das Wetter. Jetzt möchte ich die Wetteroberfläche zusammenrollen, um Daten im JSON -Format zurückzugeben. Vielleicht möchte ich es bedienen, aber ich werde es hier ausdrucken und nicht bedienen.
Erstellen Sie eine neue NodeJS -Datei mit dem Namen cmd_exec.js:
Die Codekopie lautet wie folgt:
var exec = required ('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 ('Weather API -Fehler erhalten:'+stderr);
} anders {
/*
Der Inhalt dieses Stdouts ist das, was ich oben kehre:
{"WeatherInfo": {"City": "Peking", "CityId": "101010100", "Temp": "3", "WD": "Northwest Wind", "WS": "Level 3 "," SD ":" 23%"," WSE ":" 3 "," Zeit ":" 21:20 "," IsRadar ":" 1 "," Radar ":" JC_RADAR_AZ9010_JB "," NJD ": NO LIVE", "QY": "1019"}}}}}}}
*/
var data = json.Parse (STDOut);
console.log (Daten);
}
});
Lassen Sie uns das Ergebnis von Curl direkt erleben und das Ausführen von Skripten ist gleich:
3. Rufen Sie das Shell -Skript auf, das Parameter übergibt (chinesische_prozess.execFile ()).
Dazu müssen Sie zuerst ein Shell -Skript vorbereiten. Wenn ich beispielsweise eine Verbindung zu einem Server herstellen möchte, um sein Kennwort zu ändern, muss ich IP, Benutzer, neue PWD und alte PWD bereitstellen und eine neue Shell -Skriptdatei ändern.
Die Codekopie lautet wie folgt:
#!/bin/sh
Ip = "" "
Name = "" "
Passwort = ""
NewPassword = ""
Während GetOpts "H: u: p: n:" arg #Die Darm nach der Option zeigt an, dass die Option Parameter erfordert
Tun
Fall $ arg in
H)
IP = $ optarg
;;
U)
Name = $ optarg
;;
P)
Passwort = $ optarg
;;
N)
NewPassword = $ optarg
;;
?) #Wenn es Optionen gibt, die Sie nicht erkennen, ist arg?
Echo "enthält unbekannte Parameter"
Ausgang 1
;;
ESAC
Erledigt
#UserId zuerst
UserID = `/usr/bin/ipmitool -i lanplus -h $ ip -u $ name -p $ password Benutzerliste | Grep Root | awk '{print $ 1}' `
# Echo $ userId
#Modify Passwort gemäß UserID
/usr/bin/ipmitool -i lanplus -h $ ip -u $ name -p $ password Benutzer festgelegt Kennwort $ userId $ newpassword
Dann bereite ich eine NodeJS -Datei vor, um dieses Shell -Skript mit dem Namen File_Changepwd.js aufzurufen:
Die Codekopie lautet wie folgt:
var callFile = required ('child_process');
var ip = '1.1.1.1';
var userername = 'test';
var password = 'pwd';
var newpassword = 'newpwd';
CallFile.execFile ('Change_password.sh', ['-H', IP, '-U', Benutzername, '-p', Passwort, '-n', NewPassword], Null, Funktion (Err, Stdout, Stderr) {
Rückruf (err, stdout, stderr);
});
Es ist nicht bequem, die laufenden Ergebnisse hier zu veröffentlichen, aber ich kann Persönlichkeit verwenden, um sicherzustellen, dass sie getestet wurde.
Nach dem Lesen der oben genannten gibt es tatsächlich keine Spannung, Python -Skripte anzurufen, was im Wesentlichen Befehle ausführt.
4. Rufen Sie Python Skript an (Python -Skript selbst passt Parameter)
Hier ist eine Ablenkung. Der folgende Absatz ist eine kurze Erklärung der Parameter, die Python übergeben haben:
Die Codekopie lautet wie folgt:
#-*-Codierung: UTF-8-*-
'' ''
Modul erforderlich: sys
Anzahl der Parameter: len (sys.argv)
Skriptname: sys.argv [0]
Parameter 1: sys.argv [1]
Parameter 2: sys.argv [2]
'' ''
Importsystem
Drucken u "Skriptname:", sys.argv [0]
Für i in Reichweite (1, Len (sys.argv)):#Der Parameter beginnt ab 1
Drucken Sie u "Parameter", i, sys.argv [i]
Auslaufergebnisse:
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:
Die Codekopie lautet wie folgt:
var exec = required ('child_process'). exec;
var arg1 = 'Hallo'
var arg2 = 'jzhou' '
exec ('python py_test.py'+arg1+''+arg2+'', function (error, stdout, stderr) {
if (stDout.length> 1) {
console.log ("Sie bieten Argumente an:", stdout);
} anders {
console.log ('du anbringst Argumente an');
}
if (Fehler) {
console.info ('stderr:'+stderr);
}
});
Der Inhalt von py_test.py lautet wie folgt:
#-*-Codierung: UTF-8-*-
Importsystem
Drucken sys.argv
Die Betriebsergebnisse sind wie folgt:
Es ist ziemlich gut und ich habe einen exquisiten Blog für 2014 abgeschlossen. Haha ~~