Harici bir program Node.js içinden nasıl çalıştırılır?


137

Node.js içinden harici bir program yürütmek mümkün mü? Python'lara os.system()veya bu işlevselliği ekleyen herhangi bir kütüphaneye eşdeğer mi?


child_processModülü kullanmak istiyorsunuz . Çeşitli kullanım durumlarına birkaç açık örnek veren belgelere bakın .
— Ken Rockot

Yanıtlar:


140
var exec = require('child_process').exec;
exec('pwd', function callback(error, stdout, stderr){
    // result
});

2
Çocuk sürecinin bir sonucu üzerinde hareket etmenin en iyi yolu nedir? Örnek ... işlem bir çıkış kodu 0 döndürür ve farklı bir yöntem çağırmak istiyorsanız, ben bir hatalar çok koşmak gibi görünüyor.
— continuousqa

@continuousqa - Bu cevap 4 yaşında. Sorun yaşıyorsanız, lütfen SO'ya yeni bir soru gönderin ve gerekirse bu soruya başvurun.
— Mark Kahn

1
Bu makalenin kullanımı hakkında iyi ipuçları var child_process.
— Adriano P

@ JoãoPimentelFerreira - Bu soru 7 yaşında. Yardıma ihtiyacınız olursa yeni bir tane açmanızı öneririm
— Mark Kahn

76

exec, 512k arabellek boyutunda bellek sınırlamasına sahiptir. Bu durumda spawn kullanmak daha iyidir. Spawn ile çalışma zamanında çalıştırılan komutun stdout erişebilirsiniz

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);
});

1
Bu kodu aldım ve ortaya çıkan işlem çıktısını gösteremedi stackoverflow.com/questions/21302350/…
— Paul Verest

1
@PaulVerest: Çıktınız stderryerine değil olabilir stdout. Benim durumumda olsa closeasla gelmiyor ...
— hippietrail

1
Stdin ne olacak? işleme veri göndermek mümkün mü?
— Hernán Eche

18

En basit yol:

const {exec} = require("child_process")
exec('yourApp').unref()

unref , "uygulamanızı" beklemeden sürecinizi sonlandırmak için gereklidir

İşte exec dokümanlar


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.