node.js execute system command synchronously
Node.js (since version 0.12 - so for a while) supports execSync
:
child_process.execSync(command[, options])
You can now directly do this:
const execSync = require('child_process').execSync;code = execSync('node -v');
and it'll do what you expect. (Defaults to pipe the i/o results to the parent process). Note that you can also spawnSync
now.
See execSync library.
It's fairly easy to do with node-ffi. I wouldn't recommend for server processes, but for general development utilities it gets things done. Install the library.
npm install node-ffi
Example script:
var FFI = require("node-ffi");var libc = new FFI.Library(null, { "system": ["int32", ["string"]]});var run = libc.system;run("echo $USER");
[EDIT Jun 2012: How to get STDOUT]
var lib = ffi.Library(null, { // FILE* popen(char* cmd, char* mode); popen: ['pointer', ['string', 'string']], // void pclose(FILE* fp); pclose: ['void', [ 'pointer']], // char* fgets(char* buff, int buff, in) fgets: ['string', ['string', 'int','pointer']]});function execSync(cmd) { var buffer = new Buffer(1024), result = "", fp = lib.popen(cmd, 'r'); if (!fp) throw new Error('execSync error: '+cmd); while(lib.fgets(buffer, 1024, fp)) { result += buffer.readCString(); }; lib.pclose(fp); return result;}console.log(execSync('echo $HOME'));