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.