1.yagmail模块
python标准库中发送电子邮件的模块比较复杂,因此,有许多开原的库提供了更加易用的接口来发送电子邮件,其中yagmail是一个使用比较广泛的开原项目,yagmail底层依然使用了smtplib和email模块,但是yagmail提供了更好的接口,并具有更好的易读性
yagmail是开原项目,因此,在使用前需要安装
pip install yagmail
连接邮箱服务器
yag = yagmail.SMTP(user='xxx@163.com', password='xxxx', host='smtp.163.com')
发送邮件
yag.send(to='xxx@126.com', cc='xxx@163.com',subject='这是测试邮件', contents='这是测试邮件的内容')
断开连接
yag.close()
2. 时间戳
import time
start_time=time.time()
time.sleep(2)
end_time=time.time()
print(end_time-start_time)
可以计算出start_time=time.time()与end_time=time.time()之间的时间
3. configparser模块
3.1 ConfigParser简介
ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为section。section 下面为类似于key-value 的配置内容。
下面的info.txt文件内容如下
[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;db_host这些为option
3.2 ConfigParser 初始化对象
使用ConfigParser 首选需要初始化实例,并读取配置文件:
import configparser
config=configparser.ConfigParser()
config.read("info.txt",encoding='gbk')
3.3 ConfigParser 常用方法
1.获取所用的section节点
print(config.sections())
['db', 'concurrent']
2.获取指定section 的options。即将配置文件某个section 内key 读取到列表中:
print(config.options('db'))
['db_host', 'db_port', 'db_user', 'db_pass', 'host_port']
3. 获取指点section下指点option的值
print(config.get('db','db_host'))
127.0.0.1
# r1 = config.getint("db", "k1") #将获取到值转换为int型
# r2 = config.getboolean("db", "k2" ) #将获取到值转换为bool型
# r3 = config.getfloat("db", "k3" ) #将获取到值转换为浮点型
4. 修改某个option的值,如果不存在则会出创建
config.set('db','db_user','admin') #修改db_user的值为admin
config.write(open('info.txt','w'))
5. 检查section或option是否存在,结果以bool的形式
print(config.has_section('db1')) #是否存在该
print(config.has_option('db','db_test')) #是否存在db的section并且有db_test的option
6.添加section 和 option
config.add_section('lzb') #添加lzb这个section
config.write(open('info.txt','w'))
config.set('lzb','name','libai') #在lzb这个section添加name=libai
config.write(open('info.txt','w'))
7. 删除section 和 option
config.remove_section('lzb') #整个lzb的section下的所有内容都将删除
config.write(open('info.txt','w'))
config.remove_option('db','db_test') #将db的section中的db_test删除
config.write(open('info.txt','w'))
8. 将section下的所有信息都列出来
print(config.items('db'))
[('db_host', '127.0.0.1'), ('db_port', '69'), ('db_user', 'admin'), ('db_pass', 'root'), ('host_port', '69')]
4. paramiko模块
安装:pip install paramiko
4.1 通过paramiko模块连接主机运行bash命令
虚拟机ip:192.168.88.10
user:root
password:123456
import paramiko
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
cmd=input('请输入:')
ssh.connect(hostname='192.168.88.10',port=22,username='root',password='123456')
stdin,stdout,stderr = ssh.exec_command(cmd)
print(stdout.read().decode('utf-8'))
print(stderr.read().decode('utf-8'))
stdin:标准输入
stdout:标准输出
stderr:标准错误
4.2 通过paramiko模块连接主机下载
t=paramiko.Transport(('192.168.88.10',22))
t.connect(username='root',password='123456')
sftp=paramiko.SFTPClient.from_transport(t)
sftp.get(r'/root/a',r'C:Users15116Desktopa')
sftp.close()
get是将linux端的文件发送到windows端
4.3 通过paramiko模块连接主机上传
t=paramiko.Transport(('192.168.88.10',22))
t.connect(username='root',password='123456')
sftp=paramiko.SFTPClient.from_transport(t)
sftp.put(r'C:Users15116Desktoplock.txt',r'/root/lock1.txt')
sftp.close()
put是将windows端的文件发送到linux端
5. os模块
5.1 获取当前工作路径
import os
print(os.getcwd())
H:python1
5.2 改变当前工作路径
import os
print(os.getcwd())
os.chdir('H:python')
print(os.getcwd())
H:python1
H:python
5.3 返回上级目录用 ..
print(os.getcwd())
os.chdir('..')
print(os.getcwd())
H:python1
H:
5.4 建递归的目录
os.makedirs('s1/s2/s3')
os.chdir('s1/s2/s3')
print(os.getcwd())
H:python1s1s2s3
5.5 新建目录,只能建一层
os.mkdir('b1')
os.chdir('b1')
print(os.getcwd())
H:python11
5.6 只能删除单级目录为空的文件夹
os.rmdir('b1')
5.7 列出指定文件夹下面所有的文件夹和文件包括隐藏文件,以列表方式打印出来
print(os.listdir('H:python1'))
['.idea', '6.1.py', '6.1.spec', '6
3·.3homework1.py', '6.3homework2.py']
5.8 删除指定的一个文件
os.remove('b1/test.txt')
5.9 修改文件夹名字或者是文件名字都可以
os.rename('b1','b2') #将b1文件重命名为b2
5.10 查看一个文件的详细信息
print(os.stat('test.txt'))
H:pythonpython.exe H:/python1/6.5os模块.py
os.stat_result(st_mode=33206, st_ino=562949953434537, st_dev=337607633, st_nlink=1, st_uid=0, st_gid=0, st_size=4, st_atime=1559719610, st_mtime=1559719533, st_ctime=1559719523)
st_size=28 文件大小,单位是字节
st_atime=1528473600 用户上一次的访问时间
st_mtime=1528552906 用户上一次修改的时间(常用)
st_ctime=1528552713 用户的创建文件的时间
这个时间是时间戳,想要转换成我们能看懂的那种格式,还得转换下,比如用户创建文件时间是1528552713 转换为字符串时间
5.11 运行shell命令,直接显示结果
os.system('tasklist') #执行tasklist命令
res=os.system('tasklist > lock.txt') #返回的结果,0代表执行成功,非0代表不成功
print(res)
0
实例:在linux系统下
cmds = ['ls -ltr','df -h','ifconfig ens33 192.168.254.250/24']
for cmd in cmds:
res = os.system(cmd)
if res == 0:
continue
else:
break
5.12 判断路径是否存在,存在为True,不存在为False
print(os.path.exists('H:python1'))
True
5.13 判断一个文件是否存在,存在为True,否则为False
print(os.path.isfile('H:python1info.txt'))
5.14 判断一个目录是否存在,存在为True,否则为False
print(os.path.isdir('test.txt'))
5.15 路径拼接
a='H:python1'
b='s1ss.txt'
print(os.path.join(a,b))
H:python1s1ss.txt
5.pymysql模块:操作数据库
连接数据库之前,要确保连接的数据库的可以第三方登陆(%)
5.1 创建数据库test
import pymysql #导入模块
# 连接数据库,
db=pymysql.connect(host='192.168.88.10',user='root',password='123',port=3306)
# 使用cursor()方法获取操作游标
cur=db.cursor() # 执行sql语句
sql='create database test character set utf8;' # 输入数据库里的sql命令
db.close() #关闭db,关闭与数据库的连接
5.2 查询数据库中表的信息
import pymysql
db=pymysql.connect(host='192.168.88.10',user='root',password='123',db='mysql',port=3306)
cur=db.cursor()
sql='select host,user,password from user;'
cur.execute(sql) # 执行sql语句
results=cur.fetchall() #获取查询的所有记录
# print(results)
for i in results: # 将取出来的数据分行显示出来
print(i)
db.close()
5.4 在数据库的表中插入多行数据
import pymysql
db=pymysql.connect(host='192.168.88.10',user='root',password='123',db='test',port=3306)
cur=db.cursor()
for n in range(20):
sql='insert into students values (0,"name-%s")' % n
cur.execute(sql)
results=cur.fetchall()
db.commit() #在第三方对数据库进行增删改操作的时候,默认开启事务,因此需要进行提交操作
db.close()
6.socket模块
利用ip地址和端口号来进行通信的模块
实例1:测试22端口是否开启
import socket
ser=socket.socket()
res=ser.connect_ex(('192.168.88.10',22))
print(res)
输出结果如下:
0 # 如果22端口通返回结果为0,不通返回不为0的数字
实例2:监控多台主机
import socket
hosts=['192.168.88.5:80','192.168.88.10:22','192.168.88.12:22','192.168.88.15:22']
for host in hosts:
server=socket.socket()
server.settimeout(1) # ip通,端口不通,会循环ping,这里设置ping的时长
ip=host.split(':')[0]
port=host.split(':')[1]
res=server.connect_ex((ip,int(port)))
if res==0:
print('%s正常' % ip)
else:
print('%s不正常' % ip)
输出结果如下:
192.168.88.5不正常
192.168.88.10正常
192.168.88.12不正常
192.168.88.15不正常