Bagaimana cara menjalankan program eksternal dari dalam Node.js?
137
Apakah mungkin untuk menjalankan program eksternal dari dalam node.js? Apakah ada yang setara dengan Python os.system()atau pustaka apa pun yang menambahkan fungsi ini?
Apa cara terbaik untuk bertindak sebagai hasil dari proses anak. Contoh ... jika proses mengembalikan kode keluar 0, dan saya ingin memanggil metode yang berbeda, sepertinya saya mengalami banyak kesalahan.
berkelanjutanqa
@continuousqa - Jawaban ini berumur 4 tahun. Jika Anda mengalami masalah, silakan posting pertanyaan baru di SO dan referensi yang satu ini jika perlu.
Mark Kahn
1
Artikel ini memiliki tip bagus dalam menggunakan child_process.
Adriano P
@ JoãoPimentelFerreira - Pertanyaan ini berumur 7 tahun. Saya sarankan membuka yang baru jika Anda membutuhkan bantuan
Mark Kahn
76
exec memiliki batasan memori dengan ukuran buffer 512k. Dalam hal ini lebih baik menggunakan spawn. Dengan spawn seseorang memiliki akses ke stdout dari perintah yang dieksekusi pada saat dijalankan
var spawn = require('child_process').spawn;
var prc = spawn('java', ['-jar', '-Xmx512M', '-Dfile.encoding=utf8', 'script/importlistings.jar']);
//noinspection JSUnresolvedFunction
prc.stdout.setEncoding('utf8');
prc.stdout.on('data', function (data) {
var str = data.toString()
var lines = str.split(/(\r?\n)/g);
console.log(lines.join(""));
});
prc.on('close', function (code) {
console.log('process exit code ' + code);
});
child_process
modul. Lihat dokumentasinya , yang memberikan beberapa contoh jelas dari berbagai kasus penggunaan.Jawaban:
var exec = require('child_process').exec; exec('pwd', function callback(error, stdout, stderr){ // result });
sumber
child_process
.exec memiliki batasan memori dengan ukuran buffer 512k. Dalam hal ini lebih baik menggunakan spawn. Dengan spawn seseorang memiliki akses ke stdout dari perintah yang dieksekusi pada saat dijalankan
var spawn = require('child_process').spawn; var prc = spawn('java', ['-jar', '-Xmx512M', '-Dfile.encoding=utf8', 'script/importlistings.jar']); //noinspection JSUnresolvedFunction prc.stdout.setEncoding('utf8'); prc.stdout.on('data', function (data) { var str = data.toString() var lines = str.split(/(\r?\n)/g); console.log(lines.join("")); }); prc.on('close', function (code) { console.log('process exit code ' + code); });
sumber
stderr
bukanstdout
. Dalam kasus saya meskipunclose
tidak pernah datang ...Cara yang paling sederhana adalah:
const {exec} = require("child_process") exec('yourApp').unref()
unref diperlukan untuk mengakhiri proses Anda tanpa menunggu "AplikasiAnda"
Berikut adalah dokumen eksekutifnya
sumber
Dari dokumentasi Node.js:
Lihat http://nodejs.org/docs/v0.4.6/api/child_processes.html
sumber