Newer
Older
import { spawn } from 'child_process';
import { LogOutput, LogError, LogExit } from './Logger';
export interface Result {
command: string,
stdout: string,
stderr: string,
exitCode: Number
export default function Run(args: string[], log?: boolean): Promise<Result> {
let command = args.join(' ');
log && LogOutput(command);
const proc = spawn(args.shift() || 'echo', args);
let stdout: string[] = [], stderr: string[] = [];
proc.stdout.on('data', data => {
data = data.toString(); // safety
stdout.push(data);
log && LogOutput(data);
});
proc.stderr.on('data', data => {
data = data.toString(); // safety
stderr.push(data);
log && LogError(data);
});
return new Promise((resolve, reject) => {
proc.on('close', exitCode => {
log && LogExit(exitCode);
resolve({
command,
stdout: stdout.join('\n'),
stderr: stderr.join('\n'),
exitCode
});
});
});