美文网首页
7.10 创建子程序

7.10 创建子程序

作者: 9e8aeff1c70c | 来源:发表于2021-08-05 14:02 被阅读0次

概念

  • Deno能够通过Deno.run.产生子流程。
  • --Allow-run需要权限才能产生子进程。
  • 派生的子进程不在安全沙箱中运行。
  • 通过stdin,、stdoutstderr流与子流程进行通信。
  • 使用特定的shell,提供其路径/名称和字符串输入开关,例如:Deno.run({cmd:[“bash”,“-c”,‘“ls-la”’]});

简单例子

此示例相当于从命令行运行命令‘ECHO hello’

/**
 * subprocess_simple.ts
 */

// create subprocess
const p = Deno.run({
  cmd: ["echo", "hello"],
});

// await its completion
await p.status();

运行它:

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

安全

创建子流程需要有--Allow-run权限。请注意,子进程不在Deno沙箱中运行,因此具有与您自己从命令行运行命令相同的权限。

和子程序通信

默认情况下,使用Deno.run()时,子进程会继承父进程的stdinstdoutstderr。如果您想与Started子进程通信,可以使用“Piped”选项。

/**
 * subprocess.ts
 */
const fileNames = Deno.args;

const p = Deno.run({
  cmd: [
    "deno",
    "run",
    "--allow-read",
    "https://deno.land/std@0.95.0/examples/cat.ts",
    ...fileNames,
  ],
  stdout: "piped",
  stderr: "piped",
});

const { code } = await p.status();

// Reading the outputs closes their pipes
const rawOutput = await p.output();
const rawError = await p.stderrOutput();

if (code === 0) {
  await Deno.stdout.write(rawOutput);
} else {
  const errorString = new TextDecoder().decode(rawError);
  console.log(errorString);
}

Deno.exit(code);

当你运行它:

$ deno run --allow-run ./subprocess.ts <somefile>
[file content]

$ deno run --allow-run ./subprocess.ts non_existent_file.md

Uncaught NotFound: No such file or directory (os error 2)
    at DenoError (deno/js/errors.ts:22:5)
    at maybeError (deno/js/errors.ts:41:12)
    at handleAsyncMsgFromRust (deno/js/dispatch.ts:27:17)

相关文章

  • 7.10 创建子程序

    概念 Deno能够通过Deno.run[https://doc.deno.land/builtin/stable#...

  • 代码大全第9章:伪代码编程

    创建一个类通常有以下几个步骤: 创建类的总体设计 创建类中的子程序 复审并测试整个类 创建子程序的步骤: 设计子程...

  • 伪代码编写过程(三)

    《代码大全2》阅读随笔 通过伪代码编程过程创建子程序 如何设计子程序 检查先决条件; 定义子程序要解决的问题; 为...

  • 子程序

    Perl可以让我们创建子程序,也就是我们自己定义的函数。子程序用&开头。 定义子程序 用关键字sub定义,可以定义...

  • 高质量的子程序(一)

    《代码大全2》阅读随笔 创建子程序的正当理由 首先,很多创建类的理由也适用于子程序: 隔离复杂度; 隐藏实现细节;...

  • Oracle SQL 学习笔记21 - Procedure 和

    Oracle数据库支持创建和使用子程序。创建子程序有很多优点: 便于维护 提高数据处理的安全性和一致性 提高数据处...

  • 高质量的子程序(三)

    《代码大全2》阅读随笔 好的子程序名字 以下是一些创建好的子程序名的指导建议: 描述子程序所做的所有事情; 避免使...

  • 第4章 子程序

    子程序(subroutine):用户自己创建的,以方便重复调用某段代码。 1. 定义子程序 关键字sub开头,再写...

  • 伪代码编写过程(一)

    《代码大全2》阅读随笔 创建类的步骤概述 步骤:开始 -> 创建类的总体设计 -> 创建类中的子程序 -> 复审并...

  • Perl 持久化私有变量

    9. 持久化私有变量 在子程序中用 my操作符可以创建私有变量,但每次调用子程序时,这个私有变量都会被重新定义。 ...

网友评论

      本文标题:7.10 创建子程序

      本文链接:https://www.haomeiwen.com/subject/rrwurltx.html