提交 d43a4be0 编写于 作者: D DanSnow 提交者: Ryan Dahl

Add Process.output (#1235)

上级 e749b37b
......@@ -2,9 +2,11 @@
import * as dispatch from "./dispatch";
import * as flatbuffers from "./flatbuffers";
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 { readAll } from "./buffer";
import { assert, unreachable } from "./util";
/** How to handle subsubprocess stdio.
*
......@@ -59,6 +61,21 @@ export class Process {
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(this.rid);
}
......
......@@ -176,3 +176,14 @@ testPerm({ run: true }, async function runStderrPiped() {
assertEqual(status.signal, undefined);
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();
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册