Cada idioma tem suas próprias vantagens. Ele se combina com seus próprios pontos fortes para executar o programa com mais eficiência ou usa qual método de implementação é mais simples. O NodeJS usa processos filho para chamar comandos ou arquivos do sistema. O documento é mostrado em http://nodejs.org/api/child_process.html. O subprocesso NodeJS fornece interfaces importantes para interagir com o sistema. Suas principais APIs incluem: interfaces de entrada padrão, saída padrão e saída de erro padrão.
O processo infantil NodeJS fornece interfaces importantes para interagir com o sistema, e suas principais APIs são:
Interfaces para entrada padrão, saída padrão e saída de erro padrão
Child.stdin Obtenha entrada padrão
Child.stdout recebe saída padrão
Child.stderr obtém saída de erro padrão
Obtenha o PID do processo infantil: Child.pid
Forneça um método para gerar processos infantis: Child_process.spawn (CMD, args = [], [Opções])
Forneça um método para executar diretamente os comandos do sistema: Child_process.exec (CMD, [Opções], retorno de chamada)
Forneça um método para chamar o arquivo de script: Child_process.execfile (arquivo, [args], [options], [retorno de chamada])
Forneça um método para matar o processo: Child.Kill (Signal = 'Sigterm')
É muito interessante usar exemplos para experimentá -lo, haha ~~
1. Use o processo filho para chamar comandos do sistema (obtenha o uso da memória do sistema)
Crie um novo arquivo nodejs chamado cmd_spawn.js, o código é o seguinte:
A cópia do código é a seguinte:
var spawn = requer ('Child_process'). Spawn;
livre = spawn ('grátis', ['-m']);
// Capture a saída padrão e imprimi -lo no console
free.stdout.on ('dados', função (dados) {
console.log ('saída padrão:/n' + dados);
});
// captura a saída de erro padrão e imprimi -lo no console
free.stderr.on ('dados', função (dados) {
console.log ('Erro padrão Saída:/n' + dados);
});
// Registre o evento de desligamento do processo infantil
Free.on ('Exit', function (código, sinal) {
console.log ('PROCESSO DO CRIDADE EIXT, EXIT:' + código);
});
Aqui está o resultado de executar o script e executar diretamente o comando 'Free -m', exatamente o mesmo:
2. Executar comandos do sistema (Child_process.exec ())
Eu ainda uso isso com muita frequência, e a função parece um pouco mais poderosa do que a que acima. Por exemplo, eu gosto de prestar atenção ao clima. Agora eu quero enrolar a interface do tempo para retornar dados no formato JSON. Talvez eu queira operá -lo, mas vou imprimi -lo aqui e não operá -lo.
Crie um novo arquivo nodejs chamado cmd_exec.js:
A cópia do código é a seguinte:
var Exec = requer ('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 ('Obtenha o erro da API do tempo:'+stderr);
} outro {
/*
O conteúdo deste stdout é a coisa que eu me enrosco acima:
{"WeatherInfo": {"City": "Pequim", "CityId": "101010100", "Temp": "3", "WD": "Northwest Wind", "WS": "nível 3 "," SD ":" 23%"," WSE ":" 3 "," Time ":" 21:20 "," Isradar ":" 1 "," Radar ":" JC_Radar_AZ9010_JB "," NJD ":" Não viva ainda "," qy ":" 1019 "}}}}
*/
var dados = json.parse (stdout);
console.log (dados);
}
});
Vamos experimentar o resultado do Curl diretamente e os scripts em execução são os mesmos:
3. Ligue para o script do shell que passa os parâmetros (Child_Process.execfile ())
Para isso, você precisa preparar um script de shell primeiro. Por exemplo, se eu quiser me conectar a um servidor para modificar sua senha, preciso fornecer IP, usuário, novo PWD, PWD antigo e criar um novo arquivo de script shell alterar_password.sh:
A cópia do código é a seguinte:
#!/bin/sh
Ip = ""
Nome = ""
Senha = ""
NewPassword = ""
Enquanto getopts "h: u: p: n:" arg #the colon após a opção indica que a opção requer parâmetros
fazer
caso $ arg in
H)
Ip = $ optarg
;;
U)
Nome = $ optarg
;;
P)
Senha = $ optarg
;;
N)
NewPassword = $ optarg
;;
?) #Quando há opções que você não reconhece, Arg é?
eco "contém parâmetros desconhecidos"
saída 1
;;
ESAC
feito
#Get userID primeiro
UserID = `/usr/bin/ipmitool -i lanplus -h $ ip -u $ nome -p $ lista de usuários de senha | raiz grep | awk '{print $ 1}' `
# echo $ userID
#Modify Senha de acordo com o UserID
/usr/bin/ipmitool -i lanplus -h $ ip -u
Em seguida, preparo um arquivo nodejs para chamar esse script do Shell, chamado File_Changepwd.js:
A cópia do código é a seguinte:
var callFile = requer ('Child_Process');
var ip = '1.1.1.1';
var usuário nome = 'teste';
var senha = 'PWD';
var newPassword = 'newpwd';
callfile.execfile ('change_password.sh', ['-h', ip, '-u', nome de usuário, '-p', senha, '-n', newpassword], nulo, função (err, stdout, stderr) {
retorno de chamada (err, stdout, stderr);
});
Não é conveniente postar os resultados em execução aqui, mas posso usar a personalidade para garantir que ela tenha sido testada.
Depois de ler o exposto, na verdade, não há suspense para chamar scripts Python, que está essencialmente executando comandos.
4. Chame Python Script (o próprio script Python passa parâmetros)
Aqui está uma distração. O parágrafo a seguir é uma breve explicação dos parâmetros aprovados no Python:
A cópia do código é a seguinte:
#-*-Codificação: UTF-8-*-
'' '
Módulo necessário: sys
Número de parâmetros: len (sys.argv)
Nome do script: sys.argv [0]
Parâmetro 1: sys.argv [1]
Parâmetro 2: sys.argv [2]
'' '
Importar sistemas
Imprima u "Nome do script:", sys.argv [0]
para i no intervalo (1, len (sys.argv)):#o parâmetro começa de 1
Imprima u "parâmetro", i, sys.argv [i]
Resultados em execução:
Também prepararei um arquivo nodejs para chamar esse script python (fiz alterações em py_test.py, veja abaixo), file_python.js:
A cópia do código é a seguinte:
var Exec = requer ('Child_Process'). Exec;
var arg1 = 'olá'
var arg2 = 'jzhou'
EXEC ('Python py_test.py'+arg1+''+arg2+'', função (erro, stdout, stderr) {
if (stdout.length> 1) {
console.log ('Você oferece args:', stdout);
} outro {
console.log ('Você não oferece args');
}
if (erro) {
console.info ('stderr:'+stderr);
}
});
O conteúdo de py_test.py é o seguinte:
#-*-Codificação: UTF-8-*-
Importar sistemas
Imprimir sys.argv
Os resultados da operação são os seguintes:
É muito bom, e eu completei um blog requintado para 2014. Haha ~~