Deno 是一个现代的、安全的 JavaScript 和 TypeScript 运行时环境。它使用 V8 引擎还提供了一些有用的内置模块,其中包括子进程模块,使得在 Deno 中执行外部进程非常方便。本文将介绍如何在 Deno 中使用子进程模块来执行外部进程的方法。
在 Deno 中执行外部命令
子进程模块是 Deno 标准库的一部分,可以使用 Deno.run()
方法来创建子进程并与其交互。这个方法返回一个对象,该对象包含运行进程的标准输入、输出和错误流。
下面是一个简单的示例,展示了如何在 Deno 中执行外部命令并获得输出:
// javascriptcn.com 代码示例 const args = ["echo", "Hello, world!"]; const p = Deno.run({ cmd: args }); const { code } = await p.status(); if (code === 0) { console.log("Execution succeeded."); } else { console.log(`Execution failed with code ${code}.`); } p.close();
在这个示例中,我们使用 Deno.run()
方法创建一个子进程,传入 echo
和 Hello, world!
作为参数。我们随后调用 status()
方法获取子进程状态,包括返回码、进程消耗的 CPU 时间等等,同时通过 close()
方法关闭进程的标准输入、输出和错误流。
在 Deno 中捕获外部命令的输出
对于一些需要捕获外部命令输出的场景,可以通过指定 stdout
和 stderr
属性来实现:
// javascriptcn.com 代码示例 const args = ["ls", "-lah"]; const p = Deno.run({ cmd: args, stdout: "piped", stderr: "piped" }); const { code } = await p.status(); if (code === 0) { const rawOutput = await p.output(); console.log(new TextDecoder("utf-8").decode(rawOutput)); } else { const rawError = await p.stderrOutput(); console.error(new TextDecoder("utf-8").decode(rawError)); } p.close();
在这个示例中,我们指定了 stdout
和 stderr
属性为 "piped"
,这意味着我们需要从子进程读取输出。我们随后根据进程状态获取输出或错误,通过 output()
和 stderrOutput()
方法读入原始数据,使用 TextDecoder
解码方式将二进制数据转换成字符串,最后输出在控制台上。
在 Deno 中异步执行外部命令
在某些情况下,我们需要异步执行外部命令。对于这种场景,我们可以传递第二个参数 opts
来控制执行方式。
// javascriptcn.com 代码示例 const args = ["ls", "-lah", "/"]; const p = Deno.run({ cmd: args, stdout: "piped", stderr: "piped" }); const stdoutDone = p.stdout ? readAll(p.stdout) : undefined; const stderrDone = p.stderr ? readAll(p.stderr) : undefined; const status = await p.status(); if (stdoutDone) { console.log(new TextDecoder("utf-8").decode(await stdoutDone)); } if (stderrDone) { console.error(new TextDecoder("utf-8").decode(await stderrDone)); } p.close();
在这个示例中,我们可以看到传入了 readAll()
函数以接收子进程的输出数据。通过这种方式,我们可以在异步执行外部命令的过程中读取到完整的子进程输出,以便在后续使用。
总结
在本文中,我们介绍了一个使用 Deno 中子进程模块来执行外部进程的方法,并提供了示例代码。我们可以看到,使用 Deno 中子进程模块来执行外部进程非常简单。无论是同步执行还是异步执行外部进程,Denno 在执行都提供了很大的灵活性,并且执行起来非常安全。希望本文能够为您在 Denno 中使用子进程模块提供一些帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652b40f07d4982a6ebd3f549