Cada idioma tiene sus propias ventajas. Se combinan entre sí con sus propias fortalezas para ejecutar el programa de manera más eficiente o utiliza qué método de implementación es más simple. NodeJS utiliza procesos infantiles para llamar a los comandos o archivos del sistema. El documento se muestra en http://nodejs.org/api/child_process.html. El subproceso NodeJS proporciona interfaces importantes para interactuar con el sistema. Sus principales API incluyen: entrada estándar, salida estándar y interfaces de salida de error estándar.
El proceso infantil NodeJ proporciona interfaces importantes para interactuar con el sistema, y sus API principales son:
Interfaces para entrada estándar, salida estándar y salida de error estándar
Child.stdin Obtener entrada estándar
Child.stdout obtiene salida estándar
Child.stderr obtiene la salida de error estándar
Obtenga el PID del proceso infantil: Child.pid
Proporcione un método para generar procesos infantiles: child_process.spawn (cmd, args = [], [opciones])
Proporcione un método para ejecutar directamente los comandos del sistema: child_process.exec (cmd, [opciones], devolución de llamada)
Proporcione un método para llamar al archivo de script: child_process.execfile (archivo, [args], [opciones], [devolución de llamada])
Proporcione un método para matar el proceso: child.kill (señal = 'sigterm')
Es muy interesante usar ejemplos para experimentarlo, jaja ~~
1. Use el proceso infantil para llamar a los comandos del sistema (obtener el uso de la memoria del sistema)
Cree un nuevo archivo NodeJS llamado cmd_spawn.js, el código es el siguiente:
La copia del código es la siguiente:
var Spawn = require ('Child_process'). Spawn;
gratis = spawn ('gratis', ['-m']);
// Capture la salida estándar e imprima en la consola
libre.stdout.on ('data', function (data) {
console.log ('salida estándar:/n' + datos);
});
// Capture la salida de error estándar e imprima en la consola
libre.stderr.on ('data', function (data) {
console.log ('salida de error estándar:/n' + datos);
});
// Registre el evento de cierre del proceso infantil
Free.on ('Exit', function (Code, Signal) {
console.log ('Proceso infantil Eixt, Salir:' + código);
});
Aquí está el resultado de ejecutar el script y ejecutar directamente el comando 'gratis -m', exactamente lo mismo:
2. Ejecutar comandos del sistema (child_process.exec ())
Todavía uso esto muy a menudo, y la función se siente un poco más poderosa que la anterior. Por ejemplo, me gusta prestar atención al clima. Ahora quiero curlar la interfaz meteorológica para devolver los datos en formato JSON. Tal vez quiera operarlo, pero lo imprimiré aquí y no lo operaré.
Cree un nuevo archivo NodeJS llamado cmd_exec.js:
La copia del código es la siguiente:
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 ('Get Weather API Error:'+stderr);
} demás {
/*
El contenido de este stdout es lo que me acurruco arriba:
{"WeatherInfo": {"Ciudad": "Beijing", "CityId": "101010100", "temp": "3", "wd": "northwest viento", "ws": "nivel 3 "," SD ":" 23%"," WSE ":" 3 "," Tiempo ":" 21:20 "," Isradar ":" 1 "," radar ":" JC_RADAR_AZ9010_JB "," NJD ":" No hay vida "," Qy ":" 1019 "}}
*/
var data = json.parse (stdout);
console.log (datos);
}
});
Experimentemos el resultado de Curl directamente y en ejecución de scripts es el mismo:
3. Llame al script de shell que pasa parámetros (child_process.execfile ())
Para esto, primero debe preparar un script de shell. Por ejemplo, si quiero conectarme a un servidor para modificar su contraseña, necesito proporcionar IP, usuario, nuevo PWD, PWD antiguo y crear un nuevo archivo de script Shell Change_password.sh:
La copia del código es la siguiente:
#!/bin/sh
Ip = ""
Nombre = ""
Contraseña = ""
NewPassword = ""
Mientras que getopts "H: U: P: N:" Arg #the colon después de que la opción indica que la opción requiere parámetros
hacer
Caso $ arg en
H)
Ip = $ optarg
;;
U)
Nombre = $ Optarg
;;
PAG)
Contraseña = $ Optarg
;;
NORTE)
NewPassword = $ Optarg
;;
?) #Cuando hay opciones que no reconoces, ¿lo son arg?
Echo "contiene parámetros desconocidos"
Salir 1
;;
ESAC
hecho
#Get de usuario para
UserId = `/usr/bin/ipmitool -i lanplus -h $ ip -u $ name -p $ contraseña lista de usuarios | raíz de grep | Awk '{imprimir $ 1}' `
# Echo $ UserDid
#Modify Contraseña según el ID de usuario
/usr/bin/ipmitool -i lanplus -h $ ip -u $ name -p $ contraseña user set contraseña $ userid $ newpassword
Luego preparo un archivo NodeJS para llamar a este script de shell, llamado file_changepwd.js:
La copia del código es la siguiente:
var callFile = require ('child_process');
var ip = '1.1.1.1';
var userName = 'test';
VAB PASSWORD = 'PWD';
var newPassword = 'newpwd';
callFile.execfile ('Change_password.sh', ['-H', IP, '-u', nombre de usuario, '-p', contraseña, '-n', newPassword], null, function (err, stdout, stderr) {
devolución de llamada (err, stdout, stderr);
});
No es conveniente publicar los resultados de ejecución aquí, pero puedo usar la personalidad para asegurarme de que se haya probado.
Después de leer lo anterior, en realidad no hay suspenso para llamar a los scripts de Python, que esencialmente está ejecutando comandos.
4. Llame a Python Script (el script de Python en sí pasa parámetros)
Aquí hay una distracción. El siguiente párrafo es una breve explicación de los parámetros pasados en Python:
La copia del código es la siguiente:
#-*-Codificación: UTF-8-*-
'' '
Módulo requerido: SYS
Número de parámetros: Len (sys.argv)
Nombre del script: sys.argv [0]
Parámetro 1: SYS.ARGV [1]
Parámetro 2: SYS.ARGV [2]
'' '
Sys de importación
Imprima U "Nombre del script:", sys.argv [0]
para i en el rango (1, Len (sys.argv)):#El parámetro comienza desde 1
Imprimir U "Parámetro", I, Sys.argv [i]
Resultados de ejecución:
También prepararé un archivo NodeJS para llamar a este script de Python (hice cambios en py_test.py, ver a continuación), file_python.js:
La copia del código es la siguiente:
var exec = require ('child_process'). Exec;
var arg1 = 'hola'
var arg2 = 'jzhou'
Exec ('Python py_test.py'+arg1+''+arg2+'', function (error, stdout, stderr) {
if (stdout.length> 1) {
console.log ('Usted ofrece args:', stdout);
} demás {
console.log ('no ofrece args');
}
if (error) {
console.info ('stderr:'+stderr);
}
});
El contenido de py_test.py es el siguiente:
#-*-Codificación: UTF-8-*-
Sys de importación
Imprimir sys.argv
Los resultados de la operación son los siguientes:
Es bastante bueno y completé un blog exquisito para 2014. Jaja ~~