mirror of https://github.com/nodejs/node.git
sys.exec() no longer uses Promise
parent
c04b679e12
commit
de7016eac5
12
doc/api.txt
12
doc/api.txt
|
@ -208,19 +208,21 @@ output the string immediately to stdout.
|
|||
+inspect(object, showHidden)+ ::
|
||||
Return a string representation of the +object+. (For debugging.) If showHidden is true, then the object's non-enumerable properties will be shown too.
|
||||
|
||||
+exec(command)+::
|
||||
+exec(command, callback)+::
|
||||
Executes the command as a child process, buffers the output and returns it
|
||||
in a promise callback.
|
||||
in a callback.
|
||||
+
|
||||
----------------------------------------
|
||||
var sys = require("sys");
|
||||
sys.exec("ls /").addCallback(function (stdout, stderr) {
|
||||
sys.exec("ls /", function (err, stdout, stderr) {
|
||||
if (err) throw err;
|
||||
sys.puts(stdout);
|
||||
});
|
||||
----------------------------------------
|
||||
+
|
||||
- on success: stdout buffer, stderr buffer
|
||||
- on error: exit code, stdout buffer, stderr buffer
|
||||
The callback gets the arguments +(err, stdout, stderr)+. On success +err+
|
||||
will be +null+. On error +err+ will be an instance of +Error+ and +err.code+
|
||||
will be the exit code of the child process.
|
||||
|
||||
|
||||
|
||||
|
|
11
lib/sys.js
11
lib/sys.js
|
@ -138,11 +138,10 @@ exports.p = function () {
|
|||
}
|
||||
};
|
||||
|
||||
exports.exec = function (command) {
|
||||
exports.exec = function (command, callback) {
|
||||
var child = process.createChildProcess("/bin/sh", ["-c", command]);
|
||||
var stdout = "";
|
||||
var stderr = "";
|
||||
var promise = new events.Promise();
|
||||
|
||||
child.addListener("output", function (chunk) {
|
||||
if (chunk) stdout += chunk;
|
||||
|
@ -154,13 +153,13 @@ exports.exec = function (command) {
|
|||
|
||||
child.addListener("exit", function (code) {
|
||||
if (code == 0) {
|
||||
promise.emitSuccess(stdout, stderr);
|
||||
if (callback) callback(null, stdout, stderr);
|
||||
} else {
|
||||
promise.emitError(code, stdout, stderr);
|
||||
var e = new Error("Command failed: " + stderr);
|
||||
e.code = code;
|
||||
if (callback) callback(e, stdout, stderr);
|
||||
}
|
||||
});
|
||||
|
||||
return promise;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -3,32 +3,32 @@ process.mixin(require("./common"));
|
|||
success_count = 0;
|
||||
error_count = 0;
|
||||
|
||||
exec("ls /").addCallback(function (out) {
|
||||
success_count++;
|
||||
p(out);
|
||||
}).addErrback(function (code, out, err) {
|
||||
error_count++;
|
||||
puts("error!: " + code);
|
||||
puts("stdout: " + JSON.stringify(out));
|
||||
puts("stderr: " + JSON.stringify(err));
|
||||
exec("ls /", function (err, stdout, stderr) {
|
||||
if (err) {
|
||||
error_count++;
|
||||
puts("error!: " + err.code);
|
||||
puts("stdout: " + JSON.stringify(stdout));
|
||||
puts("stderr: " + JSON.stringify(stderr));
|
||||
} else {
|
||||
success_count++;
|
||||
p(stdout);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
exec("ls /DOES_NOT_EXIST").addCallback(function (out) {
|
||||
success_count++;
|
||||
p(out);
|
||||
assert.equal(true, out != "");
|
||||
|
||||
}).addErrback(function (code, out, err) {
|
||||
error_count++;
|
||||
|
||||
assert.equal("", out);
|
||||
assert.equal(true, code != 0);
|
||||
|
||||
puts("error!: " + code);
|
||||
puts("stdout: " + JSON.stringify(out));
|
||||
puts("stderr: " + JSON.stringify(err));
|
||||
exec("ls /DOES_NOT_EXIST", function (err, stdout, stderr) {
|
||||
if (err) {
|
||||
error_count++;
|
||||
assert.equal("", stdout);
|
||||
assert.equal(true, err.code != 0);
|
||||
puts("error code: " + err.code);
|
||||
puts("stdout: " + JSON.stringify(stdout));
|
||||
puts("stderr: " + JSON.stringify(stderr));
|
||||
} else {
|
||||
success_count++;
|
||||
p(stdout);
|
||||
assert.equal(true, stdout != "");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
|
|
@ -23,22 +23,22 @@ function error (msg) {
|
|||
}
|
||||
|
||||
function runAb(opts, callback) {
|
||||
sys.exec("ab " + opts + " http://127.0.0.1:" + PORT + "/")
|
||||
.addErrback(error)
|
||||
.addCallback(function (out) {
|
||||
var matches = /Requests per second:\s*(\d+)\./mi.exec(out);
|
||||
var reqSec = parseInt(matches[1]);
|
||||
var command = "ab " + opts + " http://127.0.0.1:" + PORT + "/";
|
||||
sys.exec(command, function (err, stdout, stderr) {
|
||||
if (err) throw err;
|
||||
var matches = /Requests per second:\s*(\d+)\./mi.exec(stdout);
|
||||
var reqSec = parseInt(matches[1]);
|
||||
|
||||
matches = /Keep-Alive requests:\s*(\d+)/mi.exec(out);
|
||||
var keepAliveRequests;
|
||||
if (matches) {
|
||||
keepAliveRequests = parseInt(matches[1]);
|
||||
} else {
|
||||
keepAliveRequests = 0;
|
||||
}
|
||||
matches = /Keep-Alive requests:\s*(\d+)/mi.exec(stdout);
|
||||
var keepAliveRequests;
|
||||
if (matches) {
|
||||
keepAliveRequests = parseInt(matches[1]);
|
||||
} else {
|
||||
keepAliveRequests = 0;
|
||||
}
|
||||
|
||||
callback(reqSec, keepAliveRequests);
|
||||
});
|
||||
callback(reqSec, keepAliveRequests);
|
||||
});
|
||||
}
|
||||
|
||||
runAb("-k -c 100 -t 2", function (reqSec, keepAliveRequests) {
|
||||
|
|
|
@ -26,15 +26,12 @@ assert.throws(function () {
|
|||
var nodeBinary = process.ARGV[0];
|
||||
var cmd = 'NODE_PATH='+libDir+' '+nodeBinary+' http://localhost:'+PORT+'/moduleB.js';
|
||||
|
||||
sys
|
||||
.exec(cmd)
|
||||
.addCallback(function() {
|
||||
modulesLoaded++;
|
||||
server.close();
|
||||
})
|
||||
.addErrback(function(code, stdout, stderr) {
|
||||
assertUnreachable('node binary could not load module from url: ' + stderr);
|
||||
});
|
||||
sys.exec(cmd, function (err, stdout, stderr) {
|
||||
if (err) throw err;
|
||||
puts('success!');
|
||||
modulesLoaded++;
|
||||
server.close();
|
||||
});
|
||||
|
||||
process.addListener('exit', function() {
|
||||
assert.equal(1, modulesLoaded);
|
||||
|
|
Loading…
Reference in New Issue