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语句)的使用,根据某个条件的结果来决定执行哪段代码。

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++希尔排序解释

希尔排序是一种排序算法,它是插入排序的改进版本。它通过将序列分成多个子序列,对每个子序列进行插入排序,然后逐步减小子序列的长度,直到整个序列有序。 希尔排序的基本思想是:选择一个增量序列,根据增量…

【天枢系列 01】Linux行数统计:命令对决,谁才是王者?

文章目录 01 统计行数命令1.1 wc 命令1.2 grep 命令1.3 sed 命令1.4 awk 命令1.5 Perl 命令 02 Linux的wc命令详细用法2.1 基本语法2.2 主要选项2.3 附加选项2.4 示例用法2.5 注意事项【重要!】 03 Linux的grep命令详细用法3.1 基本语法3.2 主要选项3.3 示例用法3.4…

Spring AMQP(3.1.1)设置ConfirmCallback和ReturnsCallback

文章目录 一、起因二、代码1. 定义exchange和queue2. RabbitTemplate3. EnhancedCorrelationData4. 发送消息 环境如下 VersionSpringBoot3.2.1spring-amqp3.1.1RabbitMq3-management 一、起因 老版本的spring-amqp在CorrelationData上设置ConfirmCallback。但是今天却突然发…

非常详细!操作系统【IO核心子系统】

🌈个人主页:godspeed_lucip 🔥 系列专栏:OS从基础到进阶 🏆🏆本文完整PDF源文件请翻阅至文章底部下载。🏆🏆 1 I/O核心子系统——概述1.1 核心子系统要完成的功能1.1.1 假脱机技术1…

Legba:一款功能强大的多协议凭证爆破与密码喷射枚举工具

关于Legba Legba是一款功能强大的多协议凭证爆破与密码喷射枚举工具。该工具的目的就是在消耗更少资源的同时实现更好的性能和稳定性,可以帮助广大研究人员执行多种协议场景下的凭证爆破,以及密码喷射和枚举任务。 支持的协议和功能 AMQP(…

Python 异常处理及程序调试

Python 是一门功能强大而又易于学习的编程语言,它提供了丰富的工具和库来帮助开发者编写高效、稳定的程序。然而,在编写复杂的应用程序时,错误和异常是难以避免的。本文将介绍 Python 中的异常处理机制以及程序调试技巧,帮助读者提…

JavaScript中什么是事件委托

JavaScript 中的事件委托(Event delegation)是一种重要的编程技术,它能够优化网页中的事件处理,提高程序的性能和可维护性。本文将详细介绍事件委托的概念、工作原理,并提供示例代码来说明其实际应用。 事件委托是基于…

PointMixer论文阅读笔记

MLP-mixer是最近很流行的一种网络结构,比起Transformer和CNN的节构笨重,MLP-mixer不仅节构简单,而且在图像识别方面表现优异。但是MLP-mixer在点云识别方面表现欠佳,PointMixer就是在保留了MLP-mixer优点的同时,还可以…

Linux版Black Basta勒索病毒针对VMware ESXi服务器

前言 Black Basta勒索病毒是一款2022年新型的勒索病毒,最早于2022年4月被首次曝光,主要针对Windows系统进行攻击,虽然这款新型的勒索病毒黑客组织仅仅才出来短短两个多月的时间,就已经在其暗网平台上已经公布了几十个受害者之多&…

【案例8】用户中心实现涉及内容和过程

图1 如图1是用盒子模型内容实现的,但是需要了解一些内容。 一.内容知识引入 1.内边距属性(padding) 为了调整盒子在网页中的显示位置,常常需要为元素设置内边距。内边距也被称为内填充,是指元素内容和边框之间的距离…

用keras对电影评论进行情感分析

文章目录 下载IMDb数据读取IMDb数据建立分词器将评论数据转化为数字列表让转换后的数字长度相同加入嵌入层建立多层感知机模型加入平坦层加入隐藏层加入输出层查看模型摘要训练模型评估模型准确率进行预测查看测试数据预测结果完整函数用RNN模型进行IMDb情感分析用LSTM模型进行…

【水文】判断同构数

正整数n若是它平方数的尾部&#xff0c;则称n为同构数。比如6是其平方数36的尾部&#xff0c;76是其平方 数5776的尾部&#xff0c;6与76都是同构数。输入正整数&#xff0c;判断是否为同构数。如果是&#xff0c;那么输出 n1;如果不是&#xff0c;那么输出n0。 #include <…

如何在Python代码中使用注解

在Python代码中使用注解&#xff08;Annotations&#xff09;主要涉及对函数参数和返回值进行类型标注。这些注解在运行时并不强制执行&#xff0c;但可以用于类型检查、提高代码可读性以及为IDE和其他工具提供更好的代码补全和错误检查功能。 以下是如何在Python代码中使用注…

linux安装mysql8且初始化表名忽略大小写

mysql8下载地址 MySQL8.0安装步骤 1、把安装包上传到linux系统&#xff0c;解压、重命名并移动到/usr/local/目录&#xff1a; cd ~ tar -xvf mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz mv mysql-8.0.32-linux-glibc2.12-x86_64/ mysql80/ mv mysql80/ /usr/local/2、在M…

TCP/IP C 语言实现单个客户端和服务端 TCP 通信

这是多线程服务端 #include <stdio.h> #include <winsock2.h> #include <pthread.h> #include <string.h> #include <conio.h> #pragma comment(lib,"ws2_32.lib") #pragma warning(disable : 4996) // 客户端结构体 typedef struct…

Springboot-接入WebSocket服务

1、依赖引入 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 2、启动类添加bean public class Application {/*** 会自动注册使用了ServerEndpoint注…

VMwareWorkstation17.0虚拟机安装Windows2.03完整详细步骤图文教程

VMwareWorkstation17.0虚拟机安装Windows2.03完整详细步骤图文教程 第一篇 下载Windows2.03第二篇 配置Windows2.03虚拟机机器环境第三篇 启动Windows2.03系统 第一篇 下载Windows2.03 1.Windows2.0原版软盘下载地址是 暂不提供&#xff0c;后续更新 2.Windows2.03虚拟机镜像下…

重案组第一季的观后感

继续研究美剧&#xff0c;重案组这部剧的人员组成&#xff0c;个性&#xff0c;特长&#xff0c;很有意思。 年龄&#xff0c;老中青三代。种族&#xff0c;白&#xff0c;黄&#xff0c;黑&#xff0c;有色。颜值&#xff0c;大众脸&#xff0c;很普通。对白&#xff0c;围绕…

鸿蒙开发-HarmonyOS UI架构

初步布局Index 当我们新建一个工程之后&#xff0c;首先会进入Index页。我们先简单的做一个文章列表的显示 class Article {title?: stringdesc?: stringlink?: string }Entry Component struct Index {State articles: Article[] []build() {Row() {Scroll() {Column() …

GiantPandaCV | 视觉类表面缺陷检测项目相关技术总结

本文来源公众号“GiantPandaCV”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;视觉类表面缺陷检测项目相关技术总结 本文由海滨撰写&#xff0c;首发于GaintPandaCV。 零、前言 做这个方向的项目也有一段时间了&#xff0c;作为…