子进程:收集输出
我们不常单独编写程序。在很多情况下,我们希望与外部系统交互,而启动子进程是实现此目的的常用方式。
Deno 命名空间有一个与外部系统交互的统一 API,称为 Deno.Command。通过它,我们可以初始化有关命令的一些信息,但它不会立即执行。
const command = new Deno.Command("deno", {
args: [
"eval",
"\
console.log('hello from deno'); \
console.error('hello from stderr'); \
",
],
});
在最简单的情况下,我们只想运行进程直到完成。这可以使用 command.output() 来实现。
let result = await command.output();
也可以使用 command.outputSync() 同步实现。
result = command.outputSync();
我们现在可以与 stdout 和 stderr 交互了。
const textDecoder = new TextDecoder();
console.log("stdout:", textDecoder.decode(result.stdout));
console.log("stderr:", textDecoder.decode(result.stderr));
使用 Deno CLI 在本地运行此示例
deno run --allow-run https://docs.deno.org.cn/examples/scripts/subprocesses_output.ts