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