在Deno中,生成子进程并与之通信可以通过使用 Deno.run
方法来实现。这个方法可以启动一个新的子进程,并允许主进程与子进程之间的标准输入输出流(stdin, stdout, stderr)进行交互。下面是一个具体的示例,展示了如何在Deno中创建一个子进程来执行一个简单的Shell命令,并读取它的输出结果:
示例:在Deno中生成子进程并读取输出
-
首先,确保你的Deno环境已经设置好,并具有运行时需要的权限。
这个示例中,我们会使用
ls
命令来列出当前目录的内容,这个命令不需要额外的文件系统权限。 -
编写代码:
typescript// 创建一个子进程来执行 `ls` 命令 const process = Deno.run({ cmd: ["ls"], // 在数组中指定要运行的命令及其参数 stdout: "piped", // 配置stdout为管道,这样我们可以读取输出 stderr: "piped" // 配置stderr为管道,用于错误处理 }); // 读取并解码子进程的输出 const output = await process.output(); // 等待stdout流 const outStr = new TextDecoder().decode(output); // 将Uint8Array解码为字符串 // 错误处理:读取并解码子进程的错误输出 const errorOutput = await process.stderrOutput(); const errorStr = new TextDecoder().decode(errorOutput); // 输出子进程的结果 console.log("stdout:", outStr); if (errorStr) { console.log("stderr:", errorStr); } // 关闭子进程的流,并等待其结束 process.close(); const status = await process.status(); // 等待子进程结束并获取其退出状态 console.log("Process exited with status", status.code);
-
运行代码:
在命令行中,你需要使用以下命令来运行你的Deno脚本,假设你的脚本文件名为
run_ls.ts
:bashdeno run --allow-run run_ls.ts
这里
--allow-run
是必要的权限标志,允许Deno运行子进程。
总结:
在这个示例中,我们使用了Deno的API来启动一个子进程,通过管道获取了其标准输出和错误输出。这种方法对于执行外部程序并处理其输出非常有效,可以用于各种自动化脚本和系统管理任务。通过适当的权限管理,Deno也为开发者提供了一种安全的方式来执行这些操作。
2024年8月24日 16:15 回复