子进程:衍生
在 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();
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