node_exec.mjsjavascript · 18 linesall
#!/usr/bin/env node
import assert from 'node:assert/strict';
import { execFile } from 'node:child_process';

const result = await new Promise(resolve => {
  execFile(
    'sh',
    ['-c', 'echo out; echo err >&2; exit 3'],
    { timeout: 5000 },
    (error, stdout, stderr) => resolve({ error, stdout, stderr }),
  );
});
assert.equal(result.error?.code, 3);
assert.equal(result.stdout, 'out\n');
assert.equal(result.stderr, 'err\n');
console.log('stdout:', result.stdout);
console.log('stderr:', result.stderr);
console.log('exit code:', result.error.code);