末学者笔记--Python模块
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:
cur.execute(sql) # 执行sql语句
results = cur.fetchall() # 获取查询的所有记录
for i in results:#遍历结果
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的值为69
config.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
》》
========================================分割线===================================