跳至主要内容

子进程:生成

对于更复杂的使用场景,我们不仅想要某个命令的输出。在这种情况下,我们可以生成子进程并与之交互。

在 Github 上编辑
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();
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/subprocesses-spawn.ts