末学者笔记--Python模块

Python 常用模块

一.yagmail模块                                                                   

python标准库中发送电子邮件的模块比较复杂,因此,有许多开原的库提供了更加易用的接口来发送电子邮件,其中yagmail是一个使用比较广泛的开原项目,yagmail底层依然使用了smtplibemail模块,但是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模块                                                                  

 

1ConfigParser简介

ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为sectionsection 下面为类似于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 的配置内容。

 

2ConfigParser 初始化对象

使用ConfigParser 首选需要初始化实例,并读取配置文件:

 

import configparser
config = configparser.ConfigParser()
config.read("info.txt", encoding="utf-8")

 

3ConfigParser 常用方法

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)、检查sectionoption是否存在,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")

写回文件的方式如下:(使用configparserwrite方法)

 

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模块,所以今天整理下比较常用的几个方法。网上这方面资料也很多,每次整理,只是对自己所学的知识进行梳理,从而加深对某个模块的使用。

 

1getcwd()

获取当前工作路径

import os
print(os.getcwd())

>>

E:\untitled\venv\课程文件

>>

 

2chdir() 改变当前工作路径

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

》》

 

4makedirs(可以建递归的目录)

新建文件夹

import os
os.makedirs("test/test1")   #相对路径创建递级目录
os.chdir("test/test1")

print(os.getcwd())

》》

E:\untitled\venv\课程文件\test\test1

》》

 

5mkdir 新建目录,只能建一层

import os
os.makedirs("test1")   #相对路径创建递级目录
os.chdir("test")

print(os.getcwd())

》》

E:\untitled\venv\课程文件\test

》》

 

6、rmdir 只能删除单级目录为空的文件夹

import os
os.rmdir("test")

 

7listdir 列出指定文件夹下面所有的文件夹和文件包括隐藏文件,以列表方式打印出来

import os
print(os.listdir(r"E:\untitled\venv\Lib"))

》》

['site-packages', 'tcl8.6']

》》

 

8remove删除指定的一个文件

import os

os.remove("test/test.py")

 

9rename 修改文件夹名字或者是文件名字都可以

import os

os.rename("test","feige")

 

10stat 查看一个文件的详细信息

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 转换为字符串时间

 

11system 运行shell命令,直接显示结果

# system:在本机终端输入命令‘ ’
os.system('ipconfig')  #其既有输出结果且有返回值,成功执行即返回‘0’,失败返回非零;跟Linux中echo $? 有点像
res = os.system('ipconfig')

print(res)

 

12os.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

》》

 

14os.path.isdir 判断一个目录是否存在,存在为True,否则为False

import os

print(os.path.isdir(r"D:\pyproject\day21模块\gouguoqinew"))

》》

True

》》

 

15os.path.join 路径拼接(重要常用)

import os
a="D:\pyproject"
b="day21模块\gouguoqinew"
print(os.path.join(a,b))

 

》》

D:\pyproject\day21模块\gouguoqinew

》》

 

 ========================================分割线===================================

posted @ 2019-06-15 11:17  *云深不知处*  阅读(269)  评论(0编辑  收藏  举报