Setiap bahasa memiliki keunggulannya sendiri. Ini menggabungkan satu sama lain dengan kekuatannya sendiri untuk melaksanakan program lebih efisien atau menggunakan metode implementasi mana yang lebih sederhana. NodeJS menggunakan proses anak untuk memanggil perintah atau file sistem. Dokumen ini ditampilkan di http://nodejs.org/api/child_process.html. Subproses NodeJS menyediakan antarmuka penting untuk berinteraksi dengan sistem. API utamanya meliputi: Input standar, output standar dan antarmuka output kesalahan standar.
Proses anak NodeJS menyediakan antarmuka penting untuk berinteraksi dengan sistem, dan API utamanya adalah:
Antarmuka untuk input standar, output standar dan output kesalahan standar
Child.stdin mendapatkan input standar
Child.stdout mendapatkan output standar
Child.stderr mendapat output kesalahan standar
Dapatkan pid dari proses anak: anak.pid
Berikan metode untuk menghasilkan proses anak: child_process.spawn (cmd, args = [], [opsi])
Berikan metode untuk secara langsung menjalankan perintah sistem: child_process.exec (cmd, [opsi], callback)
Berikan metode untuk memanggil file skrip: child_process.execfile (file, [args], [opsi], [callback])
Berikan metode untuk membunuh proses: Child.Kill (sinyal = 'sigterm')
Sangat menarik untuk menggunakan contoh untuk mengalaminya, haha ~~
1. Gunakan Proses Anak untuk Memanggil Perintah Sistem (Dapatkan Penggunaan Memori Sistem)
Buat file nodeJS baru bernama cmd_spawn.js, kodenya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
var spawn = membutuhkan ('child_process'). spawn;
gratis = spawn ('gratis', ['-m']);
// Tangkap output standar dan cetak ke konsol
free.stdout.on ('data', function (data) {
console.log ('output standar:/n' + data);
});
// Tangkap output kesalahan standar dan cetak ke konsol
free.stderr.on ('data', function (data) {
console.log ('output kesalahan standar:/n' + data);
});
// Daftarkan Acara Shutdown Proses Anak
free.on ('exit', function (code, sinyal) {
Console.log ('Child Process eixt, Exit:' + Code);
});
Berikut adalah hasil dari menjalankan skrip dan langsung menjalankan perintah 'bebas -m', persis sama:
2. Jalankan perintah sistem (child_process.exec ())
Saya masih sering menggunakan ini, dan fungsinya terasa sedikit lebih kuat daripada di atas. Misalnya, saya suka memperhatikan cuaca. Sekarang saya ingin menggulung antarmuka cuaca untuk mengembalikan data dalam format JSON. Mungkin saya ingin mengoperasikannya, tetapi saya akan mencetaknya di sini dan tidak mengoperasikannya.
Buat file nodeJS baru bernama cmd_exec.js:
Salinan kode adalah sebagai berikut:
var exec = membutuhkan ('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 ('Dapatkan kesalahan API cuaca:'+stderr);
} kalau tidak {
/*
Isi stdout ini adalah hal yang saya curahkan di atas:
{"WeatherInfo": {"City": "Beijing", "CityId": "101010100", "Temp": "3", "Wd": "Northwest Wind", "WS": "Level 3 "," SD ":" 23%"," WSE ":" 3 "," Time ":" 21:20 "," Isradar ":" 1 "," Radar ":" JC_RADAR_AZ9010_JB "," NJD ":" No Live "," Qy ":" 1019 "}}}}
*/
var data = json.parse (stdout);
console.log (data);
}
});
Mari kita alami hasil Curl secara langsung dan menjalankan skrip adalah sama:
3. Panggil skrip shell yang melewati parameter (Child_process.execfile ())
Untuk ini, Anda perlu menyiapkan skrip shell terlebih dahulu. Misalnya, jika saya ingin terhubung ke server untuk memodifikasi kata sandinya, saya perlu menyediakan IP, pengguna, PWD baru, PWD lama, dan membuat file skrip shell baru ubah_password.sh:
Salinan kode adalah sebagai berikut:
#!/bin/sh
Ip = ""
Name = ""
Kata sandi = ""
NewPassword = ""
Sedangkan getopts "h: u: p: n:" arg #colon setelah opsi menunjukkan bahwa opsi memerlukan parameter
Mengerjakan
kasus $ arg masuk
H)
IP = $ OptArg
;;
U)
Nama = $ OptArg
;;
P)
Kata sandi = $ OptArg
;;
N)
NewPassword = $ OptArg
;;
?) #Ketika ada opsi yang tidak Anda kenali, arg adalah?
Echo "berisi parameter yang tidak diketahui"
Keluar 1
;;
ESAC
Selesai
#Get userid dulu
Userid = `/usr/bin/ipmitool -i lanplus -h $ ip -u $ name -p $ Kata Sandi Daftar Pengguna | grep root | awk '{cetak $ 1}' `
# echo $ userid
#Modify Kata Sandi Menurut UserId
/usr/bin/ipmitool -i lanplus -h $ ip -u $ name -p $ Kata Sandi Set Kata Sandi $ userid $ newPassword
Lalu saya menyiapkan file nodejs untuk memanggil skrip shell ini, disebut file_changepwd.js:
Salinan kode adalah sebagai berikut:
var callfile = membutuhkan ('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', nama pengguna, '-p', kata sandi, '-n', newpassword], null, function (err, stdout, stderr) {
callback (err, stdout, stderr);
});
Tidak nyaman untuk memposting hasil berjalan di sini, tetapi saya dapat menggunakan kepribadian untuk memastikan bahwa itu telah diuji.
Setelah membaca hal di atas, sebenarnya tidak ada ketegangan untuk memanggil skrip Python, yang pada dasarnya adalah mengeksekusi perintah.
4. Panggil skrip Python (skrip Python itu sendiri melewati parameter)
Ini gangguan. Paragraf berikut adalah penjelasan singkat tentang parameter yang diteruskan pada Python:
Salinan kode adalah sebagai berikut:
#-*-Coding: UTF-8-*-
'' '
Diperlukan modul: sys
Jumlah parameter: len (sys.argv)
Nama skrip: sys.argv [0]
Parameter 1: sys.argv [1]
Parameter 2: sys.argv [2]
'' '
Impor sys
cetak u "nama skrip:", sys.argv [0]
Untuk saya dalam kisaran (1, len (sys.argv)):#parameter dimulai dari 1
cetak u "parameter", i, sys.argv [i]
Hasil Menjalankan:
Saya juga akan menyiapkan file nodeJs untuk memanggil skrip python ini (saya membuat perubahan pada py_test.py, lihat di bawah), file_python.js:
Salinan kode adalah sebagai berikut:
var exec = membutuhkan ('child_process'). exec;
var arg1 = 'halo'
var arg2 = 'jzhou'
exec ('python py_test.py'+arg1+''+arg2+'', function (error, stdout, stderr) {
if (stdout.length> 1) {
console.log ('Anda menawarkan args:', stdout);
} kalau tidak {
console.log ('Anda tidak menawarkan args');
}
if (error) {
console.info ('stderr:'+stderr);
}
});
Konten py_test.py adalah sebagai berikut:
#-*-Coding: UTF-8-*-
Impor sys
cetak sys.argv
Hasil operasi adalah sebagai berikut:
Cukup bagus, dan saya menyelesaikan blog yang indah untuk 2014. Haha ~~