子进程:生成
对于更复杂的用例,我们不只是想要某个命令的输出。在这种情况下,我们可以生成一个子进程并与其交互。
Deno 命名空间有一个统一的 API,用于与外部系统交互,名为 Deno.Command。通过它,我们可以初始化关于命令的一些信息,但它不会立即执行。
const command = new Deno.Command("deno", {
args: [
"fmt",
"-",
],
stdin: "piped",
stdout: "piped",
});
在稍微复杂一点的情况下,我们希望与一个已生成的进程交互。为此,我们首先需要生成它。
const process = command.spawn();
我们现在可以将输入通过管道传输到标准输入 (stdin)。为此,我们必须首先从流中获取一个写入器并向其写入
const writer = process.stdin.getWriter();
await writer.write(new TextEncoder().encode("console.log('hello')"));
writer.releaseLock();
然后我们必须关闭标准输入 (stdin)
await process.stdin.close();
我们现在可以等待进程输出结果
const result = await process.output();
console.log(new TextDecoder().decode(result.stdout));
使用 Deno CLI 在本地运行此示例
deno run --allow-run https://docs.deno.org.cn/examples/scripts/subprocesses_spawn.ts