Python Pexpect 模块2025年3月17日 | 阅读 10 分钟 我们都知道桌面操作系统及其功能和工作原理。我们都可能听说过一些最著名的操作系统,如 Windows、Linux、macOS 和 ChromeOS。其中,ChromeOS 也是一款基于 Linux 的桌面操作系统,这增加了 Linux 和基于 Linux 的操作系统的受欢迎程度。Linux 因其增强的安全性功能而成为程序员和开发人员中非常受欢迎的操作系统。但同时,它在普通人中并不那么受欢迎,而这一趋势背后的最大原因是用于操作和处理基于 Linux 操作系统的桌面的复杂命令。 现在,说到 Linux,它是类 UNIX 操作系统家族中的一个桌面操作系统,由 Linus Torvalds 于 1991 年 9 月 17 日首次发布。除了安全功能之外,Linux 另一点,或者说最吸引人的地方在于它是一个基于 FOSS(自由开源软件)模型的开源免费许可软件。与 Windows 和许多其他桌面操作系统不同,Linux 是完全免费的,任何人都可以下载其最新版本以及数百种发行版。Linux 为开发人员提供的其他功能包括更快的解释器和编译器、高度定制的选项、更低的操作系统复杂性等等。但是,如果我们没有 Linux 操作系统但仍然想使用 Linux 命令怎么办?这样做可能有很多原因,包括我们可能想熟悉 Linux 命令等等。也许并非所有编程语言,但 Python 为我们提供了在 Windows 或任何其他操作系统上运行 Linux 命令的选项。为此,Python 提供了 pexpect 模块,它允许我们通过 Python 程序使用其函数来自动化 Linux 命令。因此,我们将学习 Python 的 pexpect 模块的所有内容,并了解如何使用它通过 Python 程序运行 Linux 命令。 Python Pexpect 模块简介Pexpect 是一个 Python 包,用于执行许多功能,包括通过 Python 程序自动化 Linux 命令、生成子进程然后自动控制它们等等。Pexpect 模块是 Python 中一个非常丰富的模块,它提供了许多函数来执行许多不同的任务。Pexpect 模块充当生成器,它响应预期的模式;我们使用 Python 程序定义它来执行多个函数。 以下是我们可以使用 Python 的 pexpect 模块执行的一些有用功能
安装 Python Pexpect 模块Pexpect 不是 Python 的内置包(它不会与 Python 安装一起安装),因此,如果此模块未安装在我们的系统中,我们就必须安装此模块。我们应该首先确保 pexpect 模块已安装在系统中,因为没有此模块,我们将无法进行实现。如果 Pexpect 模块尚未安装在我们的系统中,我们可以通过多种方法安装此模块,而在所有可能的安装方法中,使用 pip 安装程序安装 pexpect 模块是最简单的方法。因此,在本节中,我们将使用 pip 安装程序在此模块中安装此模块,在此方法中,我们将使用以下 pip 安装程序命令 命令 我们必须在命令提示符终端 shell 中输入上面给出的命令,输入命令后,我们必须按 Enter 键,以便 pip 安装程序开始在我们的系统中安装此模块。一旦此模块的安装过程开始,它将需要一段时间才能成功在我们的系统中安装模块,我们必须等到那时。 ![]() 正如我们所见,屏幕上显示了成功安装的消息,这意味着 pexpect 模块现在已成功安装在我们的系统中。现在,我们可以继续进行 Pexpect 模块的实现部分,并开始将其导入示例程序以了解其工作原理。 使用 Pexpect 模块自动化 Linux 命令在这里,在本节中,我们将通过将 Pexpect 模块导入 Python 程序来自动化 Linux 命令。在 pexpect 模块中有三种方法,我们可以使用它们通过 Python 程序自动化 Linux 命令。 以下是我们可以用来自动化 Linux 命令的 pexpect 模块的三种方法
我们将通过在示例程序中使用所有上述三种方法来理解它们的实现。我们将为每种方法使用一个单独的示例程序,并通过它自动化 Linux 命令。 注意:上面列出的所有 pexpect 模块方法只能在类 UNIX 操作系统中运行,而在 Windows 中均不可用。因此,如果我们运行这些方法或示例程序,它将在输出中显示错误。如果我们想在 Windows 操作系统中运行这些程序,我们必须首先为类 UNIX OS 设置虚拟环境。方法 1:使用 run() 方法我们在 pexpect 模块中有一个 run() 函数,我们可以使用它来运行和执行命令。我们可以使用 pexpect.run() 方法将 Linux 命令作为参数传递给函数来执行,然后,我们可以将执行结果返回到输出。run() 函数可以用作 os.system 方法的替代品,该方法用于执行 Linux 命令。 run() 方法的语法 以下是使用 pexpect 模块的 run() 方法执行 Linux 命令的语法 如上语法所示,我们在 run() 方法中提供了一个 Linux 命令作为参数。当我们运行程序时,run() 方法将执行提供的 Linux 命令,并在输出中显示结果。 让我们通过以下示例程序来理解使用 run() 方法执行 Linux 命令的实现。 示例 1:查看以下 Python 程序,我们在其中执行了一个 Linux 命令 输出 The result after executing Linux commands through run method: b'Welcome to Python Tutorials by JavaTpoint!\r\n' 正如我们所见,Linux 命令已成功执行,结果打印在输出中。 说明 在将 pexpect 模块导入程序(别名为 px)后,我们使用 run() 方法执行了一个示例 Linux 命令 echo 'Welcome to JavaTpoint!',并将其存储在已初始化的变量 executionResult 中。最后,我们使用 print 语句在输出中打印了执行结果。 方法 2:使用 Spawn 类方法在此方法中,我们将使用 spawn 类,它将帮助我们自动化程序中给出的 Linux 命令。Spawn 类是主要的接口,我们可以通过它在执行期间启动一个新的子进程并通过子类控制它。在 spawn 类中给出的字符串参数可以根据需要替换为 shell 命令,该命令必须在程序中执行。 Spawn 类的语法 正如我们所见,我们在 spawn 类中提供了一个 Linux 命令作为参数,它可以替换为必须执行的 shell 命令。 在使用 spawn 类方法时,我们可以与 expect() 函数一起使用,它也是 spawn 类的一个重要方法。expect() 方法等待子类(由我们为 spawn 类定义)处理,以便它返回一个给定的字符串输入。当我们运行程序时,将在 spawn 类函数中指定的模式将与子类中定义的输入字符串进行匹配,并将匹配的字符串返回到输出。子类中使用的 expect() 将返回输入模式与 spawn 类在输出中匹配的字符串的位置。 expect() 函数的语法 我们必须在 spawn 方法的子类中使用 expect() 函数,如下面的语法所示 参数:如上面给出的 expect() 函数语法所示,该函数接受以下三个参数
expect() 函数中用于引发返回值的超时值将是 pexpect.TIMEOUT。我们可以使用 expect() 函数的 searchwindow 选项来设置类的 maxread 值。 让我们通过以下示例程序来理解 spawn 类方法与子类中的 expect() 函数的实现。 示例 2:查看以下 Python 程序,我们在其中匹配了 spawn 类中定义的输入模式 输出 The defined pattern in the spawn class is matched at the index number: 2 from the input strings given in expect() method 正如我们所见,在执行 spawn 类后,输入字符串的索引号(与定义的模式匹配)将打印在输出中。这就是我们在 expect() 函数中的输入字符串与 spawn 类中定义的模式进行匹配的方式。由于索引编号从 0 开始,因此在第三个位置的输入字符串的索引号为 2。 说明 在导入 pexpect 模块(别名为 px)后,我们使用 spawn 类启动了一个子进程。在启动子进程时,我们定义了一个模式为 'JavaTpoint',我们将把这个模式与给定的输入字符串进行匹配。之后,我们使用了 expect() 函数,在该函数中我们定义了多个输入字符串。与定义模式匹配的字符串的索引号将作为结果存储在初始化的变量中。最后,我们使用 print 语句打印了带有初始化变量的结果。 方法 3:使用 sendline() 方法在此方法中,我们将使用 spawn 类启动子进程后使用 sendline() 函数。sendline() 方法将覆盖为子进程定义的模式的字符串。sendline() 方法也用于返回模式字符串消耗的字节数,但在本节中,我们将仅使用此方法匹配输入字符串中的模式。此方法用于在为子进程编写字符串时自动化 Linux 命令。 sendline() 方法的语法 pexpect 模块的 sendline() 方法用于为子进程编写匹配模式的语法如下 从上面的语法可以看出,sendline() 方法只接受一个参数。这个参数是子进程的模式。 让我们通过下面的例子来理解 sendline() 方法的工作原理 示例 3:以下 Python 程序演示了 sendline() 方法用于为子进程编写匹配模式的用法和工作原理 输出 The defined pattern for the child process by the sendline method is matched at the index number: 2 正如我们所观察到的,在执行后,输入字符串在 expect() 方法中与 sendline() 方法定义的模式匹配的索引号将打印在输出中。这就是我们如何使用 sendline() 方法为子进程定义和匹配模式。 说明 在启动子进程后,我们使用了 sendline() 方法,在该方法中我们定义了子进程的模式。之后,我们将定义的模式与 expect() 函数中给出的输入字符串进行了匹配。最后,我们打印了与为子进程定义的模式匹配的输入字符串的索引号。 结论在接下来的教程中,我们学习了 Python pexpect 模块的基础知识。我们讨论了 pexpect 模块如何帮助自动化 Linux 命令、生成子进程以及之后控制它们。我们还研究了 pexpect 模块的一些应用。我们还通过不同的示例讨论了 pexpect 模块提供的一些方法——run()、spawn() 和 sendline()——用于自动化 Linux 操作系统的命令。 下一个主题Python Optparse 模块 |
我们请求您订阅我们的新闻通讯以获取最新更新。