Javatpoint标志
Javatpoint标志

Python Pexpect模块

我们都知道桌面操作系统及其功能和工作原理。我们都一定听说过的一些最著名的操作系统是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模块作为span子模块工作,它响应预期的模式;我们定义使用Python程序来执行几个函数。

下面是一些可以使用Python的pexpect模块执行的有用函数:

  • FTP密码,
  • ssh,
  • 远程登录,
  • 自动化Linux命令,以及许多其他功能

Python Pexpect模块的安装

Pexpect不是Python的内置包(它不会随Python安装一起安装),这就是为什么如果这个模块还没有出现在我们的系统中,我们必须执行这个模块的安装。我们首先应该确保pexpect模块是否已经安装在系统中,因为如果系统中没有这个模块,我们将无法执行实现。如果我们的系统中还没有安装Pexpect模块,我们可以通过多种方法安装该模块,在所有可能的安装方法中,使用pip安装程序安装Pexpect模块是最简单、最简单的一种。这就是为什么我们将在本节中使用pip installer来在我们的系统中安装这个模块,在这种方法中,我们将使用以下pip installer命令:

我们必须在命令提示符终端shell中写入上面给出的命令,在写入命令后,我们必须按enter键,以便pip安装程序将开始在我们的系统中安装该模块。一旦开始这个模块的安装过程,在我们的系统中成功安装这个模块需要一段时间,我们需要等待。

Python Pexpect模块

正如我们所看到的,屏幕上显示了一条成功安装的消息,这意味着pexpect模块现在已成功安装到系统中。现在,我们可以继续研究Pexpect模块的实现部分,并开始将其导入示例程序,以了解它的工作情况。

用Pexpect模块自动化Linux命令

在本部分中,我们将通过Python程序将Pexpect模块导入Linux命令,从而实现Linux命令的自动化。pexpect模块中有三个方法,我们可以使用它们通过Python程序自动执行Linux命令。

下面是pexpect模块的三个方法,我们可以用它们来自动化Linux命令:

  • 使用run()方法
  • 使用刷出类方法
  • 使用sendline()方法

我们将通过在示例程序中使用上面列出的所有三个方法来理解它们的实现。我们将为每种方法使用一个单独的示例程序,并通过它自动化Linux命令。

注意:上面列出的所有pexpect模块方法只能在基于unix的操作系统中运行,没有一个可用于windows。因此,如果我们运行这些方法或示例程序,它将在输出中显示一个错误。首先,如果我们想在Windows操作系统中运行这些程序,我们必须为基于unix的操作系统设置一个Virtual环境。

方法1:使用run()方法

在pexpect模块中有一个run()函数,我们可以使用它来运行和执行命令。我们可以使用pexpect.run()方法在函数中作为参数提供它来执行Linux命令,然后在输出中返回执行结果。run()函数可以用来替换os。system方法,用于执行Linux命令。

run()方法语法:

下面是使用pexpect模块的run()方法执行Linux命令的语法:

正如我们在上面的语法中看到的,我们在run()方法中提供了一个Linux命令作为参数。当我们运行程序时,run()方法将执行提供的Linux命令并在输出中显示结果。

让我们通过下面的示例程序来理解用于执行Linux命令的run()方法的实现。

示例1:看看下面的Python程序,我们在其中执行了一个Linux命令:

输出:

通过run方法执行Linux命令后的结果:欢迎来到JavaTpoint!

正如我们所看到的,Linux命令成功地执行了,结果打印在输出中。

解释:

在程序中将pexpect模块作为px导入后,我们使用run()方法和一个示例Linux命令来回显“Welcome to JavaTpoint!”’并将其存储在一个初始化的变量中,即executionResult。最后,我们使用print语句将执行结果打印到输出中。

方法2:使用刷出类方法

在这个方法中,我们将使用一个衍生类,它将帮助我们自动化程序中给出的Linux命令。衍生类是主界面,我们可以通过它在执行过程中启动一个新的子进程,并通过子类控制它。我们在spawn类中给出的字符串参数可以被shell命令替换(无论何时需要),该命令必须在程序中执行。

刷出类语法:

正如我们所看到的,我们在spawn类中提供了一个Linux命令作为参数,它可以被必须执行的shell命令所取代。

在使用spawn类方法时,我们可以使用expect()函数与其一起使用,这也是spawn类的一个重要方法。expect()方法等待子类(由我们为衍生类定义)处理,以便它将返回一个给定的字符串输入。当我们运行程序时,我们在spawn类函数中指定的模式将与子类中定义的输入字符串进行匹配,并且匹配的字符串将在输出中返回。子类中使用的expect()将返回生成类的输入模式在输出中匹配的字符串的位置。

expect()函数的语法:

我们必须在spawn方法的子类中使用expect()函数,如下所示:

参数:正如我们在上面给出的expect()函数的语法中看到的,这个函数接受以下三个参数:

  1. inputPatterns:这些是输入字符串模式,将与我们在衍生类中定义的模式相匹配,这是函数中必须给出的参数。
  2. searchwindowsize:这是一个可选的窗口大小,定义了搜索窗口的大小。函数中这个参数的默认值是-1。
  3. async_:这也是expect()函数的可选参数,该参数所取的输入值为'True'和'False '。函数中这个参数的默认值是False。在创建非阻塞应用程序时,可以将该值设置为“True”。

expect()函数中用于引发返回值的超时值为pexpect.TIMEOUT。我们可以使用expect()函数的searchwindow选项来设置类的maxread值。

让我们通过下面的示例程序来理解在子类中使用expect()函数生成类方法的实现。

示例2:看看下面的Python程序,我们在spawn类中定义了匹配的输入模式:

输出:

衍生类中定义的模式在expect函数中给出的输入字符串的索引号:2处匹配

正如我们所看到的,输入字符串的索引号与定义的模式匹配,在执行衍生类后打印在输出中。这就是我们如何将子进程expect()函数中给出的输入字符串与衍生类中定义的模式相匹配。由于索引编号从0开始,这就是为什么将索引号2打印为输入字符串在第三个位置的位置。

解释:

在程序中将pexpect模块作为px导入后,我们已经使用spawn类启动了一个子进程。在启动子进程时,我们已经定义了一个模式'JavaTpoint',我们将与给定的输入字符串匹配。在此之后,我们使用了expect()函数,其中定义了多个输入字符串。字符串的索引号将与已定义的模式匹配,并作为结果存储在初始化的变量中。最后,我们在print语句中使用一个初始化的变量打印结果。

方法三:使用sendline方法

在这个方法中,我们将在使用衍生类启动子进程后使用sendline()函数。sendline()方法将重写为子进程定义的模式的字符串。Sendline方法还用于返回我们定义的模式字符串所消耗的字节数,但在本部分中,我们只使用此方法来匹配来自输入字符串的模式。此方法用于在为子进程写入字符串时自动执行Linux命令。

sendline方法的语法:

下面是使用pexpect模块的sendline方法为子进程写入匹配模式的语法:

正如我们所看到的,sendline函数只接受一个参数,这是子进程的模式。

通过下面的示例程序,我们可以了解sendline方法的实现和应用:

示例3:请看下面的Python程序,其中我们使用sendline()函数为子进程编写匹配模式:

输出:

sendline方法为子进程定义的模式在索引号:0处匹配

正如我们所看到的,在执行之后,expect()函数的输入字符串与sendline方法所定义的模式相匹配的索引号被打印在输出中。这就是我们如何使用sendline方法为子进程定义和匹配模式。

解释:

在启动子进程之后,我们使用了sendline()函数,其中定义了子进程的模式。然后,我们将定义的模式与expect()函数中给出的输入字符串进行匹配。最后,打印输入字符串的索引号,该索引号与为子进程定义的模式相匹配。


下一个话题 Python Optparse模块





Youtube 观看视频请加入我们的Youtube频道:现在加入

反馈


帮助他人,请分享

脸谱网 推特 pinterest

学习最新教程


准备


热门的技术


B.Tech / MCA






Baidu
map