Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const childProcess = require("child_process");
- const readWholeStream = (...streams) => new Promise((res, rej) => {
- const allBuffer = [];
- let running = streams.length;
- for (const stream of streams)
- stream
- .on('data', buffer => allBuffer.push(buffer))
- .on('end', () => --running == 0 ? res(Buffer.concat(allBuffer)) : null)
- .on('error', err => rej(err));
- });
- const getOutput = async childProcess => {
- const stdout = readWholeStream(childProcess.stdout);
- const stderr = readWholeStream(childProcess.stderr);
- const combined = readWholeStream(childProcess.stdout, childProcess.stderr);
- return {
- stdout: (await stdout).toString('utf8'),
- stderr: (await stderr).toString('utf8'),
- combined: (await combined).toString('utf8')
- }
- }
- const executeCommand = async command => {
- const proc = childProcess.spawn(command[0], command.slice(1));
- const outputProm = getOutput(proc);
- const exitCodeProm = new Promise((res, rej) => proc.on('exit', res));
- const output = await outputProm;
- const exitCode = await exitCodeProm;
- return {
- ...output, exitCode,
- hasErrord: exitCode != 0 || output.stderr != ''
- }
- }
- (async () => {
- console.log(await executeCommand(['node', 'example.js']));
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement