Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. const childProcess = require("child_process");
  2.  
  3. const readWholeStream = (...streams) => new Promise((res, rej) => {
  4. const allBuffer = [];
  5. let running = streams.length;
  6. for (const stream of streams)
  7. stream
  8. .on('data', buffer => allBuffer.push(buffer))
  9. .on('end', () => --running == 0 ? res(Buffer.concat(allBuffer)) : null)
  10. .on('error', err => rej(err));
  11. });
  12.  
  13. const getOutput = async childProcess => {
  14. const stdout = readWholeStream(childProcess.stdout);
  15. const stderr = readWholeStream(childProcess.stderr);
  16. const combined = readWholeStream(childProcess.stdout, childProcess.stderr);
  17.  
  18. return {
  19. stdout: (await stdout).toString('utf8'),
  20. stderr: (await stderr).toString('utf8'),
  21. combined: (await combined).toString('utf8')
  22. }
  23. }
  24.  
  25. const executeCommand = async command => {
  26. const proc = childProcess.spawn(command[0], command.slice(1));
  27.  
  28. const outputProm = getOutput(proc);
  29. const exitCodeProm = new Promise((res, rej) => proc.on('exit', res));
  30.  
  31. const output = await outputProm;
  32. const exitCode = await exitCodeProm;
  33.  
  34. return {
  35. ...output, exitCode,
  36. hasErrord: exitCode != 0 || output.stderr != ''
  37. }
  38. }
  39.  
  40. (async () => {
  41. console.log(await executeCommand(['node', 'example.js']));
  42. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement