子程序:衍生
在 Github 上編輯
對於更複雜的用例,我們不只是想要某些命令的輸出。在這種情況下,我們可以衍生一個子程序並與之互動。
Deno 命名空間有一個統一的 API,用於與外部系統互動,稱為 Deno.Command。有了它,我們可以初始化一些關於命令的資訊,但它不會立即執行。
const command = new Deno.Command("deno", {
args: [
"fmt",
"-",
],
stdin: "piped",
stdout: "piped",
});
在稍微複雜一點的情況下,我們想要與衍生的程序互動。為此,我們首先需要衍生它。
const process = command.spawn();
我們現在可以將輸入通過管道傳送到 stdin。為此,我們必須首先從串流取得 writer 並寫入它
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://deno-docs.dev.org.tw/examples/scripts/subprocesses_spawn.ts