Як виконати зовнішню програму з Node.js?


137

Чи можливо виконати зовнішню програму зсередини node.js? Чи є еквівалент Python os.system()або будь-яка бібліотека, яка додає цю функціональність?


Ви хочете використовувати child_processмодуль. Дивіться документацію , яка містить кілька чітких прикладів різних випадків використання.
Кен Рокот

Відповіді:


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

2
Який найкращий спосіб діяти на результат дитячого процесу. Приклад ... якщо процес повертає код виходу 0, і я хочу викликати інший метод, я, мабуть, зіткнувся з безліччю помилок.
continuousqa

@continuousqa - цій відповіді 4 роки. Якщо у вас виникли проблеми, будь ласка, опублікуйте нове запитання на SO та посилайтеся на це, якщо потрібно.
Марк Кан

1
У цій статті є хороші поради щодо використання child_process.
Адріано П

@ JoãoPimentelFerreira - цьому питанню 7 років. Я пропоную відкрити нову, якщо вам потрібна допомога
Марк Кан

75

exec має обмеження пам'яті розміром буфера 512k. У цьому випадку краще використовувати нерест. З нерестом є доступ до stdout виконаної команди під час виконання

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
Я взяв цей код, і він не відображає вихід породженого процесу stackoverflow.com/questions/21302350/…
Пол Верест

1
@PaulVerest: Ваш висновок, можливо, був stderrзамість цього stdout. У моєму випадку, хоча closeце ніколи не настає ...
hippietrail

1
що з stdin? чи можна надсилати дані в процес?
Ернан Еш

18

Найпростіший спосіб:

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

прибрати посилання необхідно завершити процес , не чекаючи «YourApp»

Ось документи Exec


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.