Python 常用模块
一.yagmail模块                                                                   
python标准库中发送电子邮件的模块比较复杂,因此,有许多开原的库提供了更加易用的接口来发送电子邮件,其中yagmail是一个使用比较广泛的开原项目,yagmail底层依然使用了smtplib和email模块,但是yagmail提供了更好的接口,并具有更好的易读性。
yagmail是开原项目,因此,在使用前需要安装
 
——>pip install yagmail
 
import yagmail
 
连接邮箱服务器:
yag = yagmail.SMTP(user='18618250232@163.com', password='abc123', host='smtp.163.com')
发送邮件:
yag.send(to=['18618250232@163.com','18702510185@163.com'],subject='这是测试邮件标题', contents=['这是测试邮件的内容',r'C:\Users\Administrator.USER-20190512NQ\Desktop\sed.txt'])
断开连接
yag.close() 
二.pymysql模块                                                                  
#pymysql操作数据库
import pymysql
# 打开数据库连接
db = pymysql.connect(host="192.168.254.24", user="root",
                     password="root", db="mysql", port=3306)
# 使用cursor()方法获取操作游标
cur = db.cursor()
# 1.查询操作
# 编写sql 查询语句  user 对应我的表名
sql = "select host,user,password from user"
try:
执行sql语句
获取查询的所有记录
遍历结果
        print(i)
except Exception as e:
raise e
finally:
db.close()  # 关闭连接
 
三.configparse模块                                                                  
 
1、ConfigParser简介
ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为section。section 下面为类似于key-value 的配置内容(与yum源文件类似)。
 
[db]
db_host = 127.0.0.1
db_port = 69
db_user = root
db_pass = root
host_port = 69
 
[concurrent]
thread = 10
processor = 20
括号“[ ]”内包含的为section。紧接着section 为类似于key-value 的options 的配置内容。
 
2、ConfigParser 初始化对象
使用ConfigParser 首选需要初始化实例,并读取配置文件:

import configparser
config = configparser.ConfigParser()
config.read("info.txt", encoding="utf-8") 
3、ConfigParser 常用方法
1)、获取所用的section节点
 
# 获取所用的section节点
import configparser
config = configparser.ConfigParser()
config.read("ini", encoding="utf-8")
print(config.sections()) 
》》
['db', 'concurrent']
》》
 
2)、获取指定section 的options。
即将配置文件某个section 内key 读取到列表中:
 
import configparser
config = configparser.ConfigParser()
config.read("ini", encoding="utf-8")
r = config.options("db")
print(r) 
》》
['db_host', 'db_port', 'db_user', 'db_pass', 'host_port']
》》
 
3)、获取指点section下指点option的值
 
import configparser
config = configparser.ConfigParser()
config.read("ini", encoding="utf-8")
r = config.get("db", "db_host")
print(r)》》
127.0.0.1
》》
 
# r1 = config.getint("db", "k1") #将获取到值转换为int型
# r2 = config.getboolean("db", "k2" ) #将获取到值转换为bool型
# r3 = config.getfloat("db", "k3" ) #将获取到值转换为浮点型
 
4)、获取指点section的所用配置信息
 
import configparser
config = configparser.ConfigParser()
config.read("ini", encoding="utf-8")
r = config.items("db")
print(r)》》
[('db_host', '127.0.0.1'), ('db_port', '69'), ('db_user', 'root'), ('db_pass', 'root'), ('host_port', '69')]
》》
 
5)、修改某个option的值,如果不存在则会出创建
 
# 修改某个option的值,如果不存在该option 则会创建
import configparser
config = configparser.ConfigParser()
config.read("ini", encoding="utf-8")
config.set("db", "db_port", "50")   #修改db_port的值为69config.set("db", "db_name", "database")   #没有则创建新的
config.write(open("ini", "w"))   #写入文件
 
6)、检查section或option是否存在,bool值
import configparser
config = configparser.ConfigParser()
config.has_section("section")    #是否存在该section
config.has_option("section", "option")  #是否存在该option
 
res = config.has_section('fengzi111')
print(res)》》
False
》》
 
res = config.has_option("db", "db_port")
print(res)》》
True
》》
 
7)、添加section 和 option
 
import configparser
config = configparser.ConfigParser()
config.read("ini", encoding="utf-8")
if not config.has_section("default"):  # 检查是否存在section
    config.add_section("default")
if not config.has_option("default", "db_host"):  # 检查是否存在该option
    config.set("default", "db_host", "1.1.1.1")
config.write(open("ini", "w")) 
8)、删除section 和 option
import configparser
config = configparser.ConfigParser()
config.read("ini", encoding="utf-8")
config.remove_section("default")   #整个section下的所有内容都将删除
config.write(open("ini", "w")) 
9)、写入文件
 
以下的几行代码只是将文件内容读取到内存中,进过一系列操作之后必须写回文件,才能生效。
import configparser
config = configparser.ConfigParser()
config.read("ini", encoding="utf-8")
写回文件的方式如下:(使用configparser的write方法)
 
config.write(open("ini", "w"))
 
四.paramiko模块                                                                
1.概念:
在ansible里有模块:
     yaml
     paramiko
     jinja2
# import paramiko
作用:实现python远程操作Linux系统,类似x-shell
 
2.通过paramiko模块连接主机运行bash命令

import paramiko
ssh = paramiko.SSHClient()   #模块实例化
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())   #自动添加传输协议
cmd = input('==>:')
ssh.connect(hostname='192.168.254.10',port=22,username='root',password='root')   #添加主机信息
stdin, stdout, stderr = ssh.exec_command(cmd)   #远程执行命令的标准输入、输出、错误(顺序最好不要出错)
print(stdout.read().decode('utf-8'))
print(stderr.read().decode('utf-8')) 
 
3.通过paramiko模块连接主机上传
import paramiko
hostname = '192.168.254.24'
port = 22
username = 'root'
password = 'root'
t=paramiko.Transport((hostname,port))
t.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put(r'C:\Users\administrator\Desktop\Linux.xmind', '/root/aaa.xmind')
sftp.close() 
 
4.通过paramiko模块连接主机下载
import paramiko
hostname = '192.168.254.24'
port = 22
username = 'root'
password = 'root'
t=paramiko.Transport((hostname,port))
t.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/root/test3.yml', r'C:\Users\administrator\Desktop\test3.yml')
sftp.close() 
5.<<利用paramiko模块配置lvs

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

def master():
    cmd = [
        'yum install ipvsadm -y',
        'ipvsadm -C',
        'ipvsadm -A -t 192.168.254.250:80 -s rr',
        'ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.18:80 -g',
        'ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.19:80 -g',
        'ifconfig ens33:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up',
        'route add -host 192.168.254.250 dev ens33:0'
    ]
    ssh.connect(hostname='192.168.254.17', port=22, username='root', password='123')
    for i in cmd:
        stdin, stdout, stderr = ssh.exec_command(i)
        print(stdin.read().decode('utf-8'))
        print(stderr.read().decode('utf-8'))

def client(x):
    cmd1 = [
        'ifconfig lo:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up',
        'route add -host 192.168.254.250 dev lo:0',
        'echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore',
        'echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce',
        'echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore',
        'echo "2">/proc/sys/net/ipv4/conf/all/arp_announce'
    ]
    ssh.connect(hostname='192.168.254.%s' % x, port=22, username='root', password='123')
    for i in cmd1:
        stdin, stdout, stderr = ssh.exec_command(i)
        print(stdin.read().decode('utf-8'))
        print(stderr.read().decode('utf-8'))

def main():
    master()
    client(18)
    client(19)
if __name__ == '__main__':
    main() 
五.socket模块                                                                       
作用:利用ip地址和端口号来进行通信的模块

import socket
hosts = ['192.168.254.10:22','192.168.254.12:22','192.168.254.132:222','192.168.254.11:22']
for host in hosts:
    server = socket.socket()
    server.settimeout(1)   #设置超时时间
    ip = host.split(':')[0]
    port = host.split(':')[1]
    res = server.connect_ex((ip,int(port)))  #端口应该为整型,需加int;联通了有返回值‘0’,未通返回值不为0
    if res == 0:
        print('%s正常' % ip)
    else:
        print('%s不正常' % ip) 
六.Psutil模块                                                                          
作用:监控系统资源(cpu,硬盘,内存)
需要下载:pip in install psutil
 
使用:
import psutil
内存使用情况
mem = psutil.virtual_memory()
print(mem)
print(mem[1])  #默认为列表格式,可截取下标为1的值

cpu使用率
cpu = psutil.cpu_percent(1)  #一秒内cpu的占用率
print(cpu)

硬盘使用情况
disk = psutil.disk_usage('C:')   #查看c盘使用情况
print(disk)

定义函数本着一各原则:尽量一个动作一个函数 
七.os模块                                                                                 
 
【作用】:
与本机系统交互的模块;在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路径进行操作,这就依赖于os模块,所以今天整理下比较常用的几个方法。网上这方面资料也很多,每次整理,只是对自己所学的知识进行梳理,从而加深对某个模块的使用。
 
1、getcwd()
获取当前工作路径
import os
print(os.getcwd())>>
E:\untitled\venv\课程文件
>>
 
2、chdir() 改变当前工作路径
import os
print(os.getcwd())
os.chdir(r"E:\untitled\venv\Lib")
print(os.getcwd())>>
E:\untitled\venv\课程文件
E:\untitled\venv\Lib
>>
 
3、返回上级目录用‘..’
import os
print(os.getcwd())
os.chdir("..")
print(os.getcwd())》》
E:\untitled\venv\课程文件
E:\untitled\venv
》》
 
4、makedirs(可以建递归的目录)
新建文件夹
import os
os.makedirs("test/test1")   #相对路径创建递级目录
os.chdir("test/test1")
print(os.getcwd())》》
E:\untitled\venv\课程文件\test\test1
》》
 
5、mkdir 新建目录,只能建一层
import os
os.makedirs("test1")   #相对路径创建递级目录
os.chdir("test")
print(os.getcwd())》》
E:\untitled\venv\课程文件\test
》》
 
6、rmdir 只能删除单级目录为空的文件夹
import os
os.rmdir("test") 
7、listdir 列出指定文件夹下面所有的文件夹和文件包括隐藏文件,以列表方式打印出来
import os
print(os.listdir(r"E:\untitled\venv\Lib"))》》
['site-packages', 'tcl8.6']
》》
 
8、remove删除指定的一个文件
import os
os.remove("test/test.py")
 
9、rename 修改文件夹名字或者是文件名字都可以
import os
os.rename("test","feige")
 
10、stat 查看一个文件的详细信息
import os
print(os.stat("gouguoqinew/testnew"))
 
》》
os.stat_result(st_mode=33206, st_ino=15085150720, st_dev=75373296, st_nlink=1, st_uid=0, st_gid=0, st_size=28, st_atime=1528473600, st_mtime=1528552906, st_ctime=1528552713)
》》
 
st_size=28    文件大小,单位是字节
 
st_atime=1528473600  用户上一次的访问时间
 
st_mtime=1528552906  用户上一次修改的时间(常用)
 
st_ctime=1528552713   用户的创建文件的时间
 
这个时间是时间戳,想要转换成我们能看懂的那种格式,还得转换下,比如用户创建文件时间是1528552713 转换为字符串时间
 
11、system 运行shell命令,直接显示结果
# system:在本机终端输入命令‘ ’
os.system('ipconfig')  #其既有输出结果且有返回值,成功执行即返回‘0’,失败返回非零;跟Linux中echo $? 有点像
res = os.system('ipconfig')
print(res) 
12、os.path.exists 判断路径是否存在,存在为True,不存在为False
import os
print(os.path.exists("D:\pyproject\day21模块\gouguoqinew"))
 
》》
True
》》
 
13、os.path.isfile 判断一个文件是否存在,存在为True,否则为False
import os
print(os.path.isfile(r"D:\pyproject\day21模块\gouguoqinew\test.py"))
》》
True
》》
 
14、os.path.isdir 判断一个目录是否存在,存在为True,否则为False
import os
print(os.path.isdir(r"D:\pyproject\day21模块\gouguoqinew"))
》》
True
》》
 
15、os.path.join 路径拼接(重要常用)
import os
a="D:\pyproject"
b="day21模块\gouguoqinew"
print(os.path.join(a,b)) 
》》
D:\pyproject\day21模块\gouguoqinew
》》
 
 ========================================分割线===================================