Is it possible to execute an external program from within node.js? Is there an equivalent to Python's os.system() or any library that adds this functionality?
5 Answers
var exec = require('child_process').exec;
exec('pwd', function callback(error, stdout, stderr) {
// result
});
3 Comments
continuousqa
What's the best way to act on a result of the child process. Example... if the process returns an exit code 0, and I want to call a different method, I seem to run into a plethora of errors.
exec has memory limitation of buffer size of 512k. In this case it is better to use spawn. With spawn one has access to stdout of executed command at run time
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);
});
3 Comments
Paul Verest
I took this code and it fails to show output of spawned process stackoverflow.com/questions/21302350/…
hippietrail
@PaulVerest: Your output may have been in
stderr rather than stdout. In my case though the close is never coming ...Hernán Eche
what about stdin? is it possible to send data to the process?
The simplest way is:
const { exec } = require("child_process")
exec('yourApp').unref()
unref is necessary to end your process without waiting for "yourApp"
Here are the exec docs
Comments
From the Node.js documentation:
Node provides a tri-directional popen(3) facility through the ChildProcess class.
child_processmodule. See the documentation, which provides several clear examples of various use cases.