我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python模块pexpect安装及使用流程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python模块pexpect安装及使用流程

一、pexpect模块介绍

Pexpect使Python成为控制其他应用程序的更好工具。可以理解为Linux下的expect的Python封装,通过pexpect我们可以实现对ssh,ftp,passwd,telnet等命令行进行自动交互,而无需人工干涉来达到自动化的目的

二、Pexpect的安装

#python2
pip install pexpect
#python3
pip3 install pexpect

三、pexpect的核心组件

3.1 spawn类

3.1.1 简介

  • 是Pexpect库的主要对象即接口类
  • 用于启动和控制子程序

3.1.2 使用流程

  • 建立spawn类的实例,传入要运行的命令。
  • 调用spawn类的实例方法,与子命令交互。
  • 通过交互的信息,完成要实现的相关功能。

3.1.3 构造方法参数

参数说明
command任何系统可执行的命令
参数可直接放入command
不直接支持管道、通配符、标志输入、输出、错误重定向
args=[]专门将command命令的参数放入这个列表中
'/bin/bash',['-c','cat test | grep gree']形式
实现管道、通配符、标志输入、输出、错误重定向等功能
timeout=30超出时间,抛出错误
maxread=2000从TTY读取信息最大缓冲区
logfile=None指定日志文件,可指定为sys.stdout
cwd=None指定命令运行时的当前目录
env=None指定命令运行时环境变量有哪些
encoding=None命令运行时,信息编码
codec_errors=‘strict’编码转换时的转向

(1)command

>>> import pexpect
>>> child = pexpect.spawn('ls')
>>> child.expect(pexpect.EOF)
0
>>> print(child.before.decode())
get-pip.py  nohup.out  stop-ssl-dos.sh
index.html  Python-2.7.18  ssl_flood.sh

>>> child = pexpect.spawn('ls -l /home')
>>> child.expect(pexpect.EOF)
0
>>> print(child.before.decode())
total 12
drwxr-xr-x 12 root root 4096 Dec 15 14:52 files
drwxr-xr-x 10 root root 4096 Aug 13  2020 opt
drwxr-xr-x  2 root root 4096 Jul 27  2017 users

# 不支持管道、通配符、标志输入、输出、错误重定向
>>> child = pexpect.spawn('ls -l | grep Python')
>>> child.expect(pexpect.EOF)
0
>>> print(child.before.decode())
/bin/ls: cannot access |: No such file or directory
/bin/ls: cannot access grep: No such file or directory
/bin/ls: cannot access Python: No such file or directory

(2)args=[]

# []传入参数列表
>>> child = pexpect.spawn('ls',args=['-l','/home'])
>>> child.expect(pexpect.EOF)
0
>>> print(child.before.decode())
total 12
drwxr-xr-x 12 root root 4096 Dec 15 14:52 files
drwxr-xr-x 10 root root 4096 Aug 13  2020 opt
drwxr-xr-x  2 root root 4096 Jul 27  2017 users

# 实现管道、通配符、标志输入、输出、错误重定向等功能
>>> child = pexpect.spawn('/bin/bash',['-c','ls -al | grep Python'])
>>> child.expect(pexpect.EOF)
0
>>> print(child.before.decode())
drwxr-xr-x  18 1000 1000       4096 Feb  9 20:31 Python-2.7.18

(5)logfile=None

打开文件

>>> f = open('log.txt','wb')
>>> child = pexpect.spawn('ls -l /home', logfile=f)
>>> child.expect(pexpect.EOF)
0
>>> f.close()
>>> exit()

[root@xxxx-2021 ~]# cat log.txt
total 12
drwxr-xr-x 12 root root 4096 Dec 15 14:52 files
drwxr-xr-x 10 root root 4096 Aug 13  2020 opt
drwxr-xr-x  2 root root 4096 Jul 27  2017 users

在终端直接显示

>>> f = open('log.txt','wb')
>>> child = pexpect.spawn('ls -l /home', logfile=f)
>>> child.expect(pexpect.EOF)
0
>>> f.close()
>>> exit()

[root@xxxx-2021 ~]# cat log.txt
total 12
drwxr-xr-x 12 root root 4096 Dec 15 14:52 files
drwxr-xr-x 10 root root 4096 Aug 13  2020 opt
drwxr-xr-x  2 root root 4096 Jul 27  2017 users

(6)cwd=None

>>> child = pexpect.spawnu('ls -al', logfile=sys.stdout, cwd='/home')
>>> child.expect(pexpect.EOF)
total 20
drwxr-xr-x  5 root root 4096 Jul 27  2017 .
drwxr-xr-x 28 root root 4096 Dec 16 07:56 ..
drwxr-xr-x 12 root root 4096 Dec 15 14:52 files
drwxr-xr-x 10 root root 4096 Aug 13  2020 opt
drwxr-xr-x  2 root root 4096 Jul 27  2017 users
0
>>>

3.1.4 基本属性和方法

描述说明
基本方法expect(pattern,timeout=-1)注:仅列出主要参数
- pattern:可以为字符串、正则表达式、EOF、TIMEOUT,或者是以上类型的列表。用于匹配子命令返回结果
- 从子命令返回结果中进行匹配,若只提供字符串等非列表,匹配成功返回0;若提供列表,则返回匹配成功的列表序号;匹配失败则会引发异常;
- 匹配事项:
(1)匹配的方式是从返回信息中逐个字符读出进行匹配
(2)pattern为列表时,从左至右哪个最先匹配到就匹配哪个
(3)可以对结果进行多次匹配,但只能从前往后,前边已搜索匹配的内容不会再进行匹配
(4)匹配时自动应用re.DOTALL正则选项。(.+会匹配所有字符,.*返回空字符)。
(5)匹配行尾用'\r\n'(无法用$匹配行尾)
- timeout默认为-1时,使用默认的超时期限;设置为None时,将阻塞至返回信息

sendline(s='')
基本属性before:匹配点之前的文本
after:匹配成功的内容
match:已匹配的匹配对象,匹配失败为None
特殊匹配pexpect.EOF
pexpect.TIMEOUT
它们实际是两个异常类

(1)expect()连续匹配

# 连续匹配
>>> child = pexpect.spawn('ls -l')
>>> child.expect(pexpect.EOF)
0
>>> print(child.before)
total 8
-rw-r--r-- 1 root root    0 Feb 21 19:18 log.txt
drwxr-xr-x 2 root root 4096 Feb 21 19:18 test
drwxr-xr-x 2 root root 4096 Feb 21 19:19 tttt

>>>
>>> child = pexpect.spawn('ls -l')
>>> child.expect('test')
0
>>> print(child.after)
test
>>> child.expect('ttt')
0
>>> print(child.after)
ttt
>>>

# 连续匹配 列表形式
>>> child = pexpect.spawn('ls -l')
>>> child.expect('test')
0
>>> print(child.after)
test
>>> child.expect('ttt')
0
>>> print(child.after)
ttt
>>>
>>> child = pexpect.spawn('ls -l')
>>> child.expect('test')
0
>>> child.expect(['test','ttt']) 
1        # 1为ttt的列表索引,因为此前已经匹配过test,文件游标不会再匹配(test在前,tttt在后)
>>>

(2)sendline(s=’’)

bash展示

[root@xxxx-2021 ~]# nslookup
> https://www.jd.com/
Server:		10.138.48.2
Address:	10.138.48.2#53

Non-authoritative answer:
*** Can't find https://www.jd.com/: No answer
>

使用sendline实现以上命令行功能:

>>> import pexpect
>>> child = pexpect.spawn('nslookup')
>>> child.expect('>')
0
>>> child.sendline('https://www.jd.com/')
20
>>> child.expect('>')
0
>>> print(child.before.decode())
 https://www.jd.com/
Server:		10.138.48.2
Address:	10.138.48.2#53

Non-authoritative answer:
*** Can't find https://www.jd.com/: No answer

>>>

3.1.5 其他发送信息的方法

方法描述
send(s)类似于sendline(),只发送字符串给子程序;
不添加回车符(换行符);
打开了日志,则会添加到日志中;
返回已发送字节数;
write(s)同send()方法,但无返回值;
writelines(sequense)调用write()方法,将序列中内容发送
sendcontrol(char)发送类似ctrl+d、ctrl+d等组合键
sendof()发送一个结束符,一般用于确认上一次发送内容缓冲结束
sendintr()发送退出信号

3.1.6 其他获取结果的方法

方法描述
expect_exact()用法与expect()方法相同,匹配速度更快;
除pattern不能用正则表达式
expect_list()匹配列表只用已编译正则表达式和EOF、TIMEOUT;
提高匹配速度;
expect()方法是通过它工作的
read(size=-1)从子程序输出中读取指定量数据。
size为-1时读取时直到EOF(当子程序退出后使用)
readline(size=-1)-1时直接读取一行数据;
0时返回为空;
其他值时被忽略,返回一行;
# send方法
>>> child = pexpect.spawn('nslookup')
>>> child.expect('>')
0
>>> child.send('www.baidu.com')
13
>>> child.send('\n')
1
>>> child.expect('>')
0
>>> print(child.before.decode())
 www.baidu.com
Server:		10.138.48.2
Address:	10.138.48.2#53

Non-authoritative answer:
www.baidu.com	canonical name = www.xxx.com.
Name:	www.xxx.com
Address: 100.59.200.6
Name:	www.xxx.com
Address: 100.59.200.7


# write方法
child.write('www.baidu.com\n')

# writelines方法
child.writelines(['www.baidu.com','\n'])

# sendintr方法 -- False表示子程序已经结束了
>>> child.sendintr()
>>> child.isalive()
False    

3.1.7 其他常用方法

方法描述
compile_pattern_list(patterns)编译列表每一项的正则表达式;
当多次应用expect匹配时,每次会先对其列表实行编译后匹配;
为了提高效率,可以预先调用它进行编译;
之后直接使用expect_list()方法进行匹配
eof()抛出过EOF错误,则返回真。
interact(escape_character=’\x\d’, input_filter=None, output_filter=None)实现子程序和用户直接交互;
开启了日志,输入和输出会记录在日志文件中;
input_filter和output_filter用于对输入和输出进行过滤;传入的应是接受字符串参数并返回字符串的一个函数;
默认退出键为ctrl+]

3.1.8 控制子程序方法

方法描述
kill(sig)通过给子程序发送信号(signal);
  

到此这篇关于Python模块之pexpect详解的文章就介绍到这了,更多相关Python模块pexpect 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python模块pexpect安装及使用流程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python安装使用命令行交互模块pexpect的基础教程

一、安装 1、安装easy_install工具wget http://peak.telecommunity.com/dist/ez_setup.pypython ez_setup.py 安装easy_install工具(这个脚本会自动去官网
2022-06-04

python ffmpeg模块怎么安装及使用

要安装和使用Python的ffmpeg模块,您可以按照以下步骤进行操作:1. 首先,确保您已经安装了ffmpeg程序。您可以从ffmpeg官方网站(https://ffmpeg.org/)下载并安装ffmpeg。2. 接下来,您需要安装ff
2023-10-20

Linux 安装python 模块及库

安装pip工具1、首先检查linux有没有安装python-pip包,直接执行 yum install python-pip2、没有python-pip包就执行命令 yum -y install epel-release(3)、执行成功之后
2023-01-31

Python Flask框架模块怎么安装及使用

这篇文章主要介绍“Python Flask框架模块怎么安装及使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python Flask框架模块怎么安装及使用”文章能帮助大家解决问题。一、概述Pyth
2023-07-05

常用的python模块及安装方法

adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheetahcherrypy:一个WEB frameworkctypes:用来调用动态链接库DBUtils:数
2023-01-31

Python及其常用模块库下载及安装

作者:LP帅气的昵称链接:http://www.jianshu.com/p/52eb3df32222來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。一、Python下载:https://www.python.o
2023-01-31

如何使用 pip 安装 Python MySQLdb 模块?

要安装Python MySQLdb模块,我们需要安装Python当前版本,即3.7我们需要找到 pip 命令所在的 Python 脚本的位置。首先,打开cmd并到达Python脚本的位置。要打开 cmd,请按“Windows+R”并键入
2023-10-22

Python怎么使用pip安装matplotlib模块

本篇内容主要讲解“Python怎么使用pip安装matplotlib模块”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么使用pip安装matplotlib模块”吧!1.首先需要下载
2023-07-05

Python Pyperclip模块怎么安装和使用

本篇内容介绍了“Python Pyperclip模块怎么安装和使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Pyperclip模块详解一
2023-07-05

python subprocess模块怎么安装和使用

要安装subprocess模块,你不需要单独安装它,因为它是Python的内置模块之一。只需确保你的Python版本是3.0以上。要使用subprocess模块,可以按照以下步骤进行操作:导入subprocess模块:import sub
python subprocess模块怎么安装和使用
2024-02-29

python ffmpeg模块怎么安装和使用

要安装和使用Python的ffmpeg模块,您可以按照以下步骤进行操作:安装ffmpeg:在安装ffmpeg模块之前,您需要先安装ffmpeg软件。您可以从ffmpeg官方网站(https://www.ffmpeg.org/)下载适合您操作
python ffmpeg模块怎么安装和使用
2024-02-29

Python Pyperclip模块安装和使用详解

Pyperclip模块兼容python2和python3,能跨平台使用,这篇文章主要介绍了Pyperclip模块安装和使用详解,需要的朋友可以参考下
2023-03-22

Python Paramiko模块的安装与使用详解

一、前言 常见的解决方法都会需要对远程服务器必要的配置,如果远程服务器只有一两台还好说,如果有N台,还需要逐台进行配置,或者需要使用代码进行以上操作时,上面的办法就不太方便了。而使用paramiko可以很好的解决以上问题,比起前面的方法,它
2022-06-04

python的tkinter模块怎么安装和使用

在安装Python时,Tkinter模块已经包含在标准库中,因此无需额外安装。要使用Tkinter模块,需要在Python脚本中导入它。以下是一个简单的示例:```pythonfrom tkinter import *# 创建一个窗口win
2023-09-09

Python 使用 pip 安装 matplotlib 模块的方法

matplotlib是python中强大的画图模块,这篇文章主要介绍了Python 使用 pip 安装 matplotlib 模块(秒解版),本文给大家介绍的非常详细,需要的朋友可以参考下
2023-02-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录