Add Process.stderrOutput() (#1828)

This commit is contained in:
Bartek Iwańczuk 2019-03-28 21:09:46 +01:00 committed by Ryan Dahl
parent c25e262b04
commit bdc455dd25
3 changed files with 34 additions and 3 deletions

View file

@ -83,7 +83,7 @@ export class Process {
}
/** Buffer the stdout and return it as Uint8Array after EOF.
* You must have set stdout to "piped" in when creating the process.
* You must set stdout to "piped" when creating the process.
* This calls close() on stdout after its done.
*/
async output(): Promise<Uint8Array> {
@ -97,6 +97,21 @@ export class Process {
}
}
/** Buffer the stderr and return it as Uint8Array after EOF.
* You must set stderr to "piped" when creating the process.
* This calls close() on stderr after its done.
*/
async stderrOutput(): Promise<Uint8Array> {
if (!this.stderr) {
throw new Error("Process.stderrOutput: stderr is undefined");
}
try {
return await readAll(this.stderr);
} finally {
this.stderr.close();
}
}
close(): void {
close(this.rid);
}

View file

@ -187,6 +187,17 @@ testPerm({ run: true }, async function runOutput() {
p.close();
});
testPerm({ run: true }, async function runStderrOutput() {
const p = run({
args: ["python", "-c", "import sys; sys.stderr.write('error')"],
stderr: "piped"
});
const error = await p.stderrOutput();
const s = new TextDecoder().decode(error);
assertEquals(s, "error");
p.close();
});
testPerm({ run: true }, async function runEnv() {
const p = run({
args: [

View file

@ -398,8 +398,13 @@ async function main() {
const { code } = await p.status();
const rawOutput = await p.output();
Deno.stdout.write(rawOutput);
if (code === 0) {
const rawOutput = await p.output();
Deno.stdout.write(rawOutput);
} else {
const rawError = await p.stderrOutput();
Deno.stdout.write(rawError);
}
Deno.exit(code);
}