laravel_进程门面_再次介绍

2024-02-17 04:52

本文主要是介绍laravel_进程门面_再次介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 单次调用
  • 进程池调用
  • 伪造和断言
  • 断言和判断的区别

前面我已经简单介绍了一点process facades,这里再进行一个补充的介绍。

可以也看看前面的介绍。

单次调用

use Illuminate\Support\Facades\Process;$result = Process::run('ls -la');return $result->output();

这段代码是使用 Laravel 框架中的 Process 门面来执行一个外部命令,并返回命令的输出结果。

1、 use Illuminate\Support\Facades\Process;

这行代码引入了 Laravel 的 Process 门面。

门面是 Laravel 提供的一种便捷的静态接口,用于访问应用程序服务容器中的底层类。

在这里,Process 门面提供了访问底层进程处理类的静态方法。

2、 $result = Process::run('ls -la');

这行代码调用了 Process 门面的 run 静态方法,执行了 ls -la 这个命令。

ls -la 是一个在 Unix 和类 Unix 系统(如 Linux)中常用的命令,用于列出当前目录下的所有文件和文件夹,

包括隐藏文件,并显示详细信息(如权限、所有者、大小等)。

run 方法会执行给定的命令,并返回一个 Symfony\Component\Process\Process 类的实例,

该实例包含了命令执行的相关信息,如输出、错误输出、退出码等。

这里将返回的 Process 实例赋值给了 $result 变量。

3、 return $result->output();

这行代码调用了 $result 变量(即 Process 实例)的 output 方法,返回了命令执行的标准输出内容。

ls -la 命令的上下文中,这将返回当前目录下的文件和文件夹列表。

最后,这个输出结果被返回,可以在调用这个代码的地方获取到这个输出结果。

进程池调用

use Illuminate\Process\Pool;
use Illuminate\Support\Facades\Process;[$first, $second, $third] = Process::concurrently(function (Pool $pool) {$pool->command('cat first.txt');$pool->command('cat second.txt');$pool->command('cat third.txt');
});return $first->output();

1、 引入必要的类

use Illuminate\Process\Pool;
use Illuminate\Support\Facades\Process;

这两行代码引入了 Pool 类和 Process 门面。

Pool 类允许你并发地执行多个进程,而 Process 门面提供了执行单个进程的静态方法。

2、 并发执行命令

[$first, $second, $third] = Process::concurrently(function (Pool $pool) {$pool->command('cat first.txt');$pool->command('cat second.txt');$pool->command('cat third.txt');
});

这部分代码做了以下几件事情:

  • Process::concurrently 方法用于并发地执行一系列命令。

它接受一个闭包函数作为参数,该函数接收一个 Pool 实例作为参数。

  • 在闭包内部,通过 $pool->command 方法,

我们添加了三个要并发执行的命令:cat first.txtcat second.txtcat third.txt

这些命令分别用于读取并输出 first.txtsecond.txtthird.txt 文件的内容。

  • Process::concurrently 方法会返回一个包含 Process 实例的数组。

在这个例子中,数组包含三个元素,分别对应我们之前添加的三个命令。

这些 Process 实例代表了并发执行的进程。

  • 我们使用数组解构 [$first, $second, $third] 来分别获取这三个 Process 实例,以便后续操作。
  1. 获取命令输出
return $first->output();

这行代码调用了 $first 变量(即第一个并发执行的进程的 Process 实例)的 output 方法,以获取该命令的输出。

在这个例子中,我们仅返回了第一个命令的输出,但你也可以以类似的方式获取其他命令的输出。

伪造和断言

Process::fake();// ...Process::assertRan('ls -la');

当你想要在测试环境中模拟命令执行时,Laravel 提供了一种方法来“伪造”这些命令的调用,

而不是真正地在文件系统中执行它们。

这在单元测试和特性测试中特别有用,因为它允许你断言命令是否按预期被调用

而不必担心实际执行命令可能带来的副作用。

Process::fake();// ... 这里可能是你的测试代码,包括调用模拟的命令执行方法Process::assertRan('ls -la');

代码的逻辑如下:

1、 Process::fake();

这行代码告诉 Laravel,在接下来的测试代码中,任何通过 Process 门面执行的命令都应该被伪造,而不是真正执行。

这意味着,当你调用如 Process::run('ls -la') 这样的方法时,

实际上并不会在文件系统中执行 ls -la 命令,而是会记录这个命令被调用了。

2、 Process::assertRan('ls -la');

这行代码是一个断言,它检查在前面的测试代码中是否有一个 ls -la 命令被“运行”了(实际上是被伪造了)。

如果在实际的测试执行过程中,有代码尝试通过 Process 门面运行 ls -la 命令,那么这个断言就会通过。

如果没有任何代码运行这个命令,或者运行了不同的命令,那么这个断言就会失败,测试也会因此而失败。

这种方法在编写单元测试时特别有用,因为它允许你验证代码逻辑是否正确地调用了系统命令,而不必担心命令执行可能带来的实际影响或副作用。

此外,由于命令执行被伪造了,因此测试通常会运行得更快,因为它们不需要等待实际命令完成。

断言和判断的区别

断言(assert)和判断(judge)在编程和逻辑上有些相似,但它们的上下文用途有所不同。

断言(Assert)通常用于编程和软件测试中,特别是在单元测试或调试中。

断言是一种编程语句,用于验证某个条件是否为真

如果条件为真,断言就会通过,程序会继续执行。

如果条件为假,断言会失败,程序通常会抛出一个异常或错误,并可能停止执行。

断言用于确保、代码中的特定条件或假设在程序的某个点上总是成立。

例如,在单元测试中,你可能会使用断言来验证一个函数的输出是否符合预期。

如果函数的输出与预期不符,断言会失败,从而指示测试没有通过。


判断(Judge)则更广泛一些,它不仅限于编程和软件测试。

判断通常指的是根据一定的标准准则对某个问题或情况做出决定或评价。

这个决定或评价可能是主观的,也可能是基于事实和数据的。

在编程中,判断通常指的是条件语句(如if语句)的使用,根据某个条件的结果来决定执行哪段代码。

所以,断言和判断都是对某种条件或情况做出判断或评价,但它们的上下文和用途有所不同。

断言更侧重于验证和测试,而判断则更广泛,可以用于各种情境下的决策和评估。

所以,验证和测试条件下的判断,这个叫做断言。

这篇关于laravel_进程门面_再次介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/716728

相关文章

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Linux进程终止的N种方式详解

《Linux进程终止的N种方式详解》进程终止是操作系统中,进程的一个重要阶段,他标志着进程生命周期的结束,下面小编为大家整理了一些常见的Linux进程终止方式,大家可以根据需求选择... 目录前言一、进程终止的概念二、进程终止的场景三、进程终止的实现3.1 程序退出码3.2 运行完毕结果正常3.3 运行完毕

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A