Czy można wykonać zewnętrzny program z poziomu node.js? Czy istnieje odpowiednik Pythona os.system()
lub jakiejkolwiek innej biblioteki, która dodaje tę funkcjonalność?
Czy można wykonać zewnętrzny program z poziomu node.js? Czy istnieje odpowiednik Pythona os.system()
lub jakiejkolwiek innej biblioteki, która dodaje tę funkcjonalność?
Odpowiedzi:
var exec = require('child_process').exec;
exec('pwd', function callback(error, stdout, stderr){
// result
});
exec ma ograniczenie pamięci o rozmiarze bufora 512k. W takim przypadku lepiej jest użyć spawnu. Przy spawn masz dostęp do standardowego wyjścia wykonywanego polecenia w czasie wykonywania
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);
});
stderr
raczej w formacie stdout
. W moim przypadku to jednak close
nigdy nie nadejdzie ...
Najprostszy sposób to:
const {exec} = require("child_process")
exec('yourApp').unref()
unref jest konieczne, aby zakończyć proces bez czekania na „yourApp”
Oto dokumentacja exec
Z dokumentacji Node.js:
Węzeł udostępnia trójkierunkową funkcję popen (3) za pośrednictwem klasy ChildProcess.
Zobacz http://nodejs.org/docs/v0.4.6/api/child_processes.html
child_process
modułu. Zobacz dokumentację , która zawiera kilka jasnych przykładów różnych przypadków użycia.