Planned intervention: On Thursday March 28th 07:00 UTC Zenodo will be unavailable for up to 5 minutes to perform a database upgrade.
Published June 15, 2022 | Version 1.1.5
Software Open

nodef/extra-child-process: Useful additions to inbuilt child_process module (initial release)

Creators

Description

Useful additions to inbuilt child_process module.<br> 📦 Node.js, 📜 Files, 📰 Docs.

Have you heard of bash or command prompt? These programs are called shells. They watch what you type, and treat it as requests to run particular programs. Programs themselves are just names on the file system, and the shell searches them in a particular manner (controlled with environment variables such as PATH). Our programs as based on UNIX principles, where each program can accept an initial input through arguments, runtime input through stdin input stream #0, and provide its runtime output into stdout output stream #1 (along with stderr output stream #2 for errors). The output of a program can be fed into another program through piping |, allowing us to set up a pipline of programs to achieve a complex operation (without having to write a new program).

child_process is an inbuilt Node.js module that enables us to execute specific programs directly (execFile), or through the shell (exec). Executing programs through the shell is hyper convenient as we are allowed to use its inbuilt commands and features such as piping of streams, but is does come with a security risk (such as command injection) when using unsanitized user input to generate the sequence of instructions to be executed on the shell. When possible, execting specific programs directly using execFile would be a suitable approach.

This package provides async versions of functions (in additon to the existing sync and callback-based functions), which are not included with the inbuilt child_process module. They are named as *Async can be used with Promise-based asynchronous programming using the await keyword. spawnAsync is a special case here, which returns a PromiseWithChild which is essentially a Promise with a .child property to allow ChildProcess to be directly accessed similar to spawn. In addition, callback-based functions, such as exec, also behave as async functions when a callback is not provided. Functions for locating path of executable(s) such as which and whichAll are also included. Design was based on local ideas and literature survey.

Stability: Experimental.

<br>

const cp = require('extra-child-process');


// 1. List files in current directory.
async function example1() {
  var {stdout, stderr} = await cp.exec('ls -a');
  var {stdout, stderr} = await cp.execFile('ls', ['-a']);
  cp.exec('ls -a', (err, stdout, stderr) => 0);
  cp.execFile('ls', ['-a'], (err, stdout, stderr) => 0);
  // → .
  // → ..
  // → .build
  // → .git
  // → .github
  // → ...
}
example1();


// 2. List files in 'src' directory.
async function example2() {
  var {stdout, stderr} = await cp.exec('ls -a', {cwd: 'src'});
  var {stdout, stderr} = await cp.execFile('ls', ['-a'], {cwd: 'src'});
  cp.exec('ls -a', {cwd: 'src'}, (err, stdout, stderr) => 0);
  cp.execFile('ls', ['-a'], {cwd: 'src'}, (err, stdout, stderr) => 0);
  // → .
  // → ..
  // → index.ts
}
example2();


// 3. Locate path of node executable.
async function example3() {
  var paths = process.env.PATH.split(';');
  var exec  = await cp.which('node');
  var exec  = await cp.which('node', {paths});
  // → 'D:\\Program Files\\nodejs\\node.exe'
}
example3();


// 4. Locate path of n*e executables.
async function example4() {
  var paths = process.env.PATH.split(';');
  var execs = await cp.whichAll(/^n.*?e$/);
  var execs = await cp.whichAll(/^n.*?e$/, {paths});
  // → [
  // →   'D:\\Program Files\\Git\\usr\\bin\\nice.exe',
  // →   'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.2\\bin\\nvprune.exe',
  // →   'D:\\Program Files\\nodejs\\node.exe'
  // → ]
}
example4();

<br> <br>

Index
Property Description
exec Execute a command within a shell, buffering any output.
execFile Execute an executable without a shell by default, buffering any output.
fork This method is a special case of spawn used specifically to spawn new Node.js processes.
spawn This method spawns a new process using the given command and args.
spawnAsync Spawn new process using given command and arguments.
which Locate path of executable for given command.
whichAll Locate paths of all matching executables for given command.

<br> <br>

References

<br> <br>

Files

nodef/extra-child-process-1.1.5.zip

Files (29.9 kB)

Name Size Download all
md5:0f116241198bafac4730132df3a4fd4d
29.9 kB Preview Download

Additional details