Jauh lebih mudah sekarang (6 tahun kemudian)!
Spawn mengembalikan childObject , yang kemudian bisa Anda dengarkan kejadiannya . Acara-acara tersebut adalah:
- Kelas: Proses Anak
- Acara: 'error'
- Acara: 'exit'
- Acara: 'tutup'
- Acara: 'putuskan'
- Acara: 'message'
Ada juga banyak objek dari childObject , yaitu:
- Kelas: Proses Anak
- child.stdin
- child.stdout
- child.stderr
- child.stdio
- child.pid
- child.connected
- child.kill ([sinyal])
- child.send (pesan [, sendHandle] [, callback])
- child.disconnect ()
Lihat informasi lebih lanjut di sini tentang childObject: https://nodejs.org/api/child_process.html
Asinkron
Jika Anda ingin menjalankan proses Anda di latar belakang sementara node masih dapat terus dijalankan, gunakan metode asynchronous. Anda masih dapat memilih untuk melakukan tindakan setelah proses Anda selesai, dan ketika proses tersebut memiliki keluaran (misalnya jika Anda ingin mengirim keluaran skrip ke klien).
child_process.spawn (...); (Node v0.1.90)
var spawn = require('child_process').spawn;
var child = spawn('node ./commands/server.js');
// You can also use a variable to save the output
// for when the script closes later
var scriptOutput = "";
child.stdout.setEncoding('utf8');
child.stdout.on('data', function(data) {
//Here is where the output goes
console.log('stdout: ' + data);
data=data.toString();
scriptOutput+=data;
});
child.stderr.setEncoding('utf8');
child.stderr.on('data', function(data) {
//Here is where the error output goes
console.log('stderr: ' + data);
data=data.toString();
scriptOutput+=data;
});
child.on('close', function(code) {
//Here you can get the exit code of the script
console.log('closing code: ' + code);
console.log('Full output of script: ',scriptOutput);
});
Inilah cara Anda menggunakan metode callback + asynchronous :
var child_process = require('child_process');
console.log("Node Version: ", process.version);
run_script("ls", ["-l", "/home"], function(output, exit_code) {
console.log("Process Finished.");
console.log('closing code: ' + exit_code);
console.log('Full output of script: ',output);
});
console.log ("Continuing to do node things while the process runs at the same time...");
// This function will output the lines from the script
// AS is runs, AND will return the full combined output
// as well as exit code when it's done (using the callback).
function run_script(command, args, callback) {
console.log("Starting Process.");
var child = child_process.spawn(command, args);
var scriptOutput = "";
child.stdout.setEncoding('utf8');
child.stdout.on('data', function(data) {
console.log('stdout: ' + data);
data=data.toString();
scriptOutput+=data;
});
child.stderr.setEncoding('utf8');
child.stderr.on('data', function(data) {
console.log('stderr: ' + data);
data=data.toString();
scriptOutput+=data;
});
child.on('close', function(code) {
callback(scriptOutput,code);
});
}
Dengan menggunakan metode di atas, Anda dapat mengirim setiap baris output dari skrip ke klien (misalnya menggunakan Socket.io untuk mengirim setiap baris saat Anda menerima acara pada stdout
atau stderr
).
Sinkronis
Jika Anda ingin node menghentikan apa yang dilakukannya dan menunggu hingga skrip selesai , Anda dapat menggunakan versi sinkron:
child_process.spawnSync (...); (Node v0.11.12 +)
Masalah dengan metode ini:
- Jika skrip membutuhkan waktu beberapa saat untuk diselesaikan, server Anda akan hang selama itu!
- Stdout hanya akan dikembalikan setelah skrip selesai dijalankan . Karena sinkron, itu tidak dapat dilanjutkan hingga baris saat ini selesai. Oleh karena itu, ia tidak dapat menangkap acara 'stdout' hingga baris pemijahan selesai.
Bagaimana cara menggunakannya:
var child_process = require('child_process');
var child = child_process.spawnSync("ls", ["-l", "/home"], { encoding : 'utf8' });
console.log("Process finished.");
if(child.error) {
console.log("ERROR: ",child.error);
}
console.log("stdout: ",child.stdout);
console.log("stderr: ",child.stderr);
console.log("exist code: ",child.status);
python
maka jangan lupa untuk memberikan-u
bendera agar tidak menyangga keluaran konsol, jika tidak maka akan terlihat seperti skrip tidak live stackoverflow.com/a/49947671/906265