运行子进程

API 参考手册

示例:

  1. // 创建子进程
  2. const p = Deno.run({
  3. cmd: ["echo", "hello"],
  4. });
  5. // 等待完成
  6. await p.status();

运行

  1. $ deno run --allow-run ./subprocess_simple.ts
  2. hello

window.onload 被赋值为一个函数,它将会在主脚本加载后被调用,和浏览器的 onload 一样,可以用于主入口点。

默认情况下,当您调用 Deno.run() 时,子进程将继承父进程的标准流。如果您想要和子进程通信,可以使用 "piped" 选项。

  1. const fileNames = Deno.args;
  2. const p = Deno.run({
  3. cmd: [
  4. "deno",
  5. "run",
  6. "--allow-read",
  7. "https://deno.land/std@$STD_VERSION/examples/cat.ts",
  8. ...fileNames,
  9. ],
  10. stdout: "piped",
  11. stderr: "piped",
  12. });
  13. const { code } = await p.status();
  14. if (code === 0) {
  15. const rawOutput = await p.output();
  16. await Deno.stdout.write(rawOutput);
  17. } else {
  18. const rawError = await p.stderrOutput();
  19. const errorString = new TextDecoder().decode(rawError);
  20. console.log(errorString);
  21. }
  22. Deno.exit(code);

运行

  1. $ deno run --allow-run ./subprocess.ts <somefile>
  2. [file content]
  3. $ deno run --allow-run ./subprocess.ts non_existent_file.md
  4. Uncaught NotFound: No such file or directory (os error 2)
  5. at DenoError (deno/js/errors.ts:22:5)
  6. at maybeError (deno/js/errors.ts:41:12)
  7. at handleAsyncMsgFromRust (deno/js/dispatch.ts:27:17)