У каждого языка есть свои преимущества. Он объединяет друг друга с собственными сильными сторонами для более эффективного выполнения программы или использования, какой метод реализации проще. Nodejs использует дочерние процессы для вызова системных команд или файлов. Документ показан по адресу http://nodejs.org/api/child_process.html. Подпроцесс Nodejs обеспечивает важные интерфейсы для взаимодействия с системой. Его основные API включают в себя: стандартный вход, стандартный выход и стандартные интерфейсы вывода ошибок.
Дочерний процесс Nodejs обеспечивает важные интерфейсы для взаимодействия с системой, а его основные API - это:
Интерфейсы для стандартного ввода, стандартного выходного и стандартного выхода ошибок
child.stdin Получите стандартный ввод
child.stdout получает стандартный выход
child.stderr получает стандартный выходной выход
Получите пид для детей: kild.pid
Предоставьте метод генерации дочерних процессов: child_process.spawn (cmd, args = [], [options])
Предоставьте метод для непосредственного выполнения системных команд: child_process.exec (cmd, [options], обратный вызов)
Предоставьте метод для вызова файла скрипта: child_process.execfile (file, [args], [options], [callback])
Предоставьте метод убийства процесса: child.kill (signal = 'sigterm')
Очень интересно использовать примеры, чтобы испытать это, ха -ха ~~
1. Используйте дочерний процесс для вызова системных команд (Получите использование системной памяти)
Создайте новый файл Nodejs с именем cmd_spawn.js, код выглядит следующим образом:
Кода -копия выглядит следующим образом:
var spawn = require ('child_process'). Spawn;
free = spawn ('free', ['-m']);
// захватить стандартный выход и распечатать его на консоли
free.stdout.on ('data', function (data) {
console.log ('стандартный выход:/n' + data);
});
// захватить стандартную вывод ошибок и распечатать его на консоли
free.stderr.on ('data', function (data) {
console.log ('стандартная ошибка вывода:/n' + data);
});
// Событие выключения процесса дочернего процесса
free.on ('exit', function (код, сигнал) {
console.log ('Child Process eixt, выход:' + code);
});
Вот результат запуска сценария и непосредственного запуска команды «Free -m», точно так же:
2. Выполнить системные команды (child_process.exec ())
Я все еще использую это очень часто, и функция кажется немного более мощной, чем вышеперечисленное. Например, мне нравится обращать внимание на погоду. Теперь я хочу свернуть интерфейс погоды, чтобы вернуть данные в формате JSON. Может быть, я хочу управлять им, но я напечатаю его здесь и не эксплуатирую.
Создайте новый файл Nodejs с именем cmd_exec.js:
Кода -копия выглядит следующим образом:
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 ('Получите ошибку API погоды:'+stderr);
} еще {
/*
Содержание этого Stdout - это то, что я скручиваю выше:
{"WeatherInfo": {"City": "Пекин", "CityId": "101010100", "Temp": "3", "WD": "Северо -Западный ветер", "WS": "Уровень 3 "," SD ":" 23%"," WSE ":" 3 "," Time ":" 21:20 "," ISRADAR ":" 1 "," RADAR ":" JC_RADAR_AZ9010_JB "," NJD ":" еще нет живого "," QY ":" 1019 "}"
*/
var data = json.parse (stdout);
console.log (data);
}
});
Давайте испытаем результат скручивания напрямую и запускаемых сценариев - это то же самое:
3. Вызовите скрипт оболочки, который передает параметры (child_process.execfile ())
Для этого вам нужно сначала подготовить сценарий оболочки. Например, если я хочу подключиться к серверу для изменения его пароля, мне нужно предоставить IP, пользователь, новый PWD, старый PWD и создать новый файл сценария оболочки.
Кода -копия выглядит следующим образом:
#!/bin/sh
Ip = ""
Name = ""
Пароль = ""
Newpassword = ""
В то время как getopts "h: u: p: n:" arg #the colon после опции указывает, что опция требует параметров
делать
Дело $ arg in
ЧАС)
Ip = $ optarg
;;
U)
Имя = $ optarg
;;
P)
Пароль = $ optarg
;;
N)
Newpassword = $ optarg
;;
?) #Когда есть варианты, которые вы не узнаете, ARG?
Эхо "содержит неизвестные параметры"
Выход 1
;;
эсак
сделанный
#Get userId в первую очередь
UserId = `/usr/bin/iptimool -i lanplus -h $ ip -u $ name -p $ пароль список пользователей | Грип корень | awk '{print $ 1}' `
# echo $ userid
#Modify пароль в соответствии с пользователем
/usr/bin/ipmitool -i lanplus -h $ ip -u $ name -p $ passwor
Затем я готовлю файл nodejs для вызова этого скрипта оболочки с именем file_changepwd.js:
Кода -копия выглядит следующим образом:
var callfile = require ('child_process');
var ip = '1.1.1.1';
var username = 'test';
var password = 'pwd';
var newpassword = 'newpwd';
callfile.execfile ('change_password.sh', ['-h', ip, '-u', username, '-p', пароль, '-n', newpassword], null, function (err, stdout, stderr) {
обратный вызов (err, stdout, stderr);
});
Не удобно публиковать здесь результаты работы, но я могу использовать личность, чтобы убедиться, что она была проверена.
После прочтения вышесказанного, на самом деле не существует ожидания, чтобы вызвать сценарии Python, которые по сути выполняют команды.
4. Вызовите сценарий Python (сам скрипт Python передает параметры)
Вот отвлечение. Следующий абзац - краткое объяснение параметров, передаваемых на Python:
Кода -копия выглядит следующим образом:
#-*-кодирование: UTF-8-*-
'' '
Требуется модуль: Sys
Количество параметров: len (sys.argv)
Имя сценария: sys.argv [0]
Параметр 1: sys.argv [1]
Параметр 2: sys.argv [2]
'' '
Импорт Sys
Печать u "Название скрипта:", sys.argv [0]
Для I в диапазоне (1, Len (Sys.argv)):#Параметр начинается с 1
Печать u "Параметр", i, sys.argv [i]
Результаты работы:
Я также подготовлю файл Nodejs для вызова этого скрипта Python (я внес изменения в py_test.py, см. Ниже), file_python.js:
Кода -копия выглядит следующим образом:
var exec = require ('child_process'). Exec;
var arg1 = 'hello'
var arg2 = 'jzhou'
exec ('python py_test.py'+arg1+''+arg2+'', function (error, stdout, stderr) {
if (stdout.length> 1) {
console.log («Вы предлагаете args:», stdout);
} еще {
console.log ('вы не предложили args');
}
if (ошибка) {
console.info ('stderr:'+stderr);
}
});
Содержание py_test.py выглядит следующим образом:
#-*-кодирование: UTF-8-*-
Импорт Sys
Print Sys.argv
Результаты работы следующие:
Это довольно хорошо, и я закончил изысканный блог на 2014 год. Ха -ха ~~