1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| 'use strict'
|
| var spawn = require('child_process').spawn
|
| /**
| * Spawn a binary and read its stdout.
| * @param {String} cmd
| * @param {String[]} args
| * @param {Function} done(err, stdout)
| */
| function run (cmd, args, options, done) {
| if (typeof options === 'function') {
| done = options
| options = undefined
| }
|
| var executed = false
| var ch = spawn(cmd, args, options)
| var stdout = ''
| var stderr = ''
|
| ch.stdout.on('data', function (d) {
| stdout += d.toString()
| })
|
| ch.stderr.on('data', function (d) {
| stderr += d.toString()
| })
|
| ch.on('error', function (err) {
| if (executed) return
| executed = true
| done(new Error(err))
| })
|
| ch.on('close', function (code, signal) {
| if (executed) return
| executed = true
|
| if (stderr) {
| return done(new Error(stderr))
| }
|
| done(null, stdout, code)
| })
| }
|
| module.exports = run
|
|