mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 15:24:46 -05:00
Add Process.stderrOutput() (#1828)
This commit is contained in:
parent
c25e262b04
commit
bdc455dd25
3 changed files with 34 additions and 3 deletions
|
@ -83,7 +83,7 @@ export class Process {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Buffer the stdout and return it as Uint8Array after EOF.
|
/** 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.
|
* This calls close() on stdout after its done.
|
||||||
*/
|
*/
|
||||||
async output(): Promise<Uint8Array> {
|
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(): void {
|
||||||
close(this.rid);
|
close(this.rid);
|
||||||
}
|
}
|
||||||
|
|
|
@ -187,6 +187,17 @@ testPerm({ run: true }, async function runOutput() {
|
||||||
p.close();
|
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() {
|
testPerm({ run: true }, async function runEnv() {
|
||||||
const p = run({
|
const p = run({
|
||||||
args: [
|
args: [
|
||||||
|
|
|
@ -398,8 +398,13 @@ async function main() {
|
||||||
|
|
||||||
const { code } = await p.status();
|
const { code } = await p.status();
|
||||||
|
|
||||||
const rawOutput = await p.output();
|
if (code === 0) {
|
||||||
Deno.stdout.write(rawOutput);
|
const rawOutput = await p.output();
|
||||||
|
Deno.stdout.write(rawOutput);
|
||||||
|
} else {
|
||||||
|
const rawError = await p.stderrOutput();
|
||||||
|
Deno.stdout.write(rawError);
|
||||||
|
}
|
||||||
|
|
||||||
Deno.exit(code);
|
Deno.exit(code);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue