mirror of
https://github.com/denoland/deno.git
synced 2024-12-31 11:34:15 -05:00
Add Process.output (#1235)
This commit is contained in:
parent
e749b37b7c
commit
d43a4be0d2
2 changed files with 30 additions and 2 deletions
|
@ -2,9 +2,11 @@
|
||||||
import * as dispatch from "./dispatch";
|
import * as dispatch from "./dispatch";
|
||||||
import * as flatbuffers from "./flatbuffers";
|
import * as flatbuffers from "./flatbuffers";
|
||||||
import * as msg from "gen/msg_generated";
|
import * as msg from "gen/msg_generated";
|
||||||
import { assert, unreachable } from "./util";
|
|
||||||
import { close, File } from "./files";
|
import { File, close } from "./files";
|
||||||
import { ReadCloser, WriteCloser } from "./io";
|
import { ReadCloser, WriteCloser } from "./io";
|
||||||
|
import { readAll } from "./buffer";
|
||||||
|
import { assert, unreachable } from "./util";
|
||||||
|
|
||||||
/** How to handle subsubprocess stdio.
|
/** How to handle subsubprocess stdio.
|
||||||
*
|
*
|
||||||
|
@ -59,6 +61,21 @@ export class Process {
|
||||||
return await runStatus(this.rid);
|
return await runStatus(this.rid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Buffer the stdout and return it as Uint8Array after EOF.
|
||||||
|
* You must have set stdout to "piped" in when creating the process.
|
||||||
|
* This calls close() on stdout after its done.
|
||||||
|
*/
|
||||||
|
async output(): Promise<Uint8Array> {
|
||||||
|
if (!this.stdout) {
|
||||||
|
throw new Error("Process.output: stdout is undefined");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return await readAll(this.stdout);
|
||||||
|
} finally {
|
||||||
|
this.stdout.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
close(): void {
|
close(): void {
|
||||||
close(this.rid);
|
close(this.rid);
|
||||||
}
|
}
|
||||||
|
|
|
@ -176,3 +176,14 @@ testPerm({ run: true }, async function runStderrPiped() {
|
||||||
assertEqual(status.signal, undefined);
|
assertEqual(status.signal, undefined);
|
||||||
p.close();
|
p.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testPerm({ run: true }, async function runOutput() {
|
||||||
|
const p = run({
|
||||||
|
args: ["python", "-c", "import sys; sys.stdout.write('hello')"],
|
||||||
|
stdout: "piped"
|
||||||
|
});
|
||||||
|
const output = await p.output();
|
||||||
|
const s = new TextDecoder().decode(output);
|
||||||
|
assertEqual(s, "hello");
|
||||||
|
p.close();
|
||||||
|
});
|
||||||
|
|
Loading…
Reference in a new issue