pyinotify模块

pip3 install pyinotify

pyinotify提供的事件:

事件标志 事件含义
IN_ACCESS 被监控项目或者被监控目录中的文件被访问,比如一个文件被读取
IN_MODIFY 被监控项目或者被监控目录中的文件被修改
IN_ATTRIB 被监控项目或者被监控目录中的文件的元数据被修改
IN_CLOSE_WRITE 一个打开切等待写入的文件或者目录被关闭
IN_CLOSE_NOWRITE 一个以只读方式打开的文件或者目录被关闭
IN_OPEN 文件或者目录被打开
IN_MOVED_FROM 被监控项目或者目录中的文件被移除监控区域
IN_MOVED_TO 文件或目录被移入监控区域
IN_CREATE 在所监控的目录中创建子目录或文件
IN_DELETE 在所监控的目录中删除目录或文件
IN_CLOSE* 文件被关闭,等同于IN_CLOSE_WRITE*
IN_MOVE 文件被移动,等同于IN_CLOSE_NOWRITE

在具体实现时,时间仅仅是一个标志位,因此,我们可以使用“与”操作来合并多个时间,下面来看一个实例

import pyinotify
#创建一个监控实例
wm = pyinotify.WatchManager()
#定义要监控的内容
mask = pyinotify.IN_DELETE | pyinotify.IN_CREATE #这里pyinotify.ALL_EVENTS表示监控所有事件
#在实例中添加动作
wm.add_watch('/tmp', mask)
#加载监控实例对象
notifier = pyinotify.Notifier(wm)
#循环处理时间
notifier.loop()

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()

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模块

一、ConfigParser简介
ConfigParser 是用来读取配置文件的包。配置文件的格式如下:中括号“[ ]”内包含的为section。section 下面为类似于key-value 的配置内容。 [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 的配置内容。 二、ConfigParser 初始化对象
使用ConfigParser 首选需要初始化实例,并读取配置文件:
import configparser
config = configparser.ConfigParser()
config.read("ini", encoding="utf-8")
三、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")
# r1 = config.getint("db", "k1") #将获取到值转换为int型
# r2 = config.getboolean("db", "k2" ) #将获取到值转换为bool型
# r3 = config.getfloat("db", "k3" ) #将获取到值转换为浮点型
print(r)
#运行结果
# 127.0.0.1 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", "") #修改db_port的值为69
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
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"))

pexpect模块

import pexpect
host = '192.168.254.24'
password = 'root'
username = 'root'
child = pexpect.spawn('ssh root@192.168.254.24')
child.expect('password:')
child.sendline(password)
child.expect('#')
child.sendline('mysql -uroot -proot')
child.expect('none')
child.sendline('show variables like "%log%";')
child.sendline('exit')
child.sendline('exit')
child.interact()
child.close()

利用pexpect查看其他机器的数据库

import pexpect
ssh = pexpect.spawn('ssh 192.168.254.12',timeout=10)
i = ssh.expect(['password:','continue connecting'],timeout=10)
print(i)
if i == 0:
ssh.sendline('root')
elif i == 1:
ssh.sendline('yes\n')
ssh.expect('password:')
ssh.sendline('root\n')
index = ssh.expect(['#',pexpect.EOF,pexpect.TIMEOUT],timeout=15)
if index == 0:
ssh.sendline('ip a')
ssh.sendline('exit')
ssh.interact()
ssh.close()
elif index == 1:
print('logging process exit')
elif index == 2:
print('logging in time out')

ssh登录主机

paramiko模块

#通过paramiko模块连接主机运行bash命令

import paramiko
hostname = '192.168.254.24'
port = 22
username = 'root'
password = 'root'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname,port=port,username=username,password=password)
stdin, stdout, stderr = ssh.exec_command("ls -ltr")
print(stdout.read().decode('utf-8')) #通过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\fengzi\Desktop\Linux.xmind', '/root/aaa.xmind')
sftp.close() #通过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\fengzi\Desktop\test3.yml')
sftp.close()

socket模块

#linux服务器(半双工)

import socket
import subprocess
import threading
server = socket.socket()
server.bind(('', 8888))
server.listen(5)
print('等待电话.....')
conn, addr = server.accept()
print('电话来了......')
while True:
data = conn.recv(10240)
cmd = subprocess.Popen(data.decode('utf-8'),
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout = cmd.stdout.read()
stderr = cmd.stdout.read()
conn.send(stdout + stderr) #客户端
import socket
import threading
client = socket.socket()
client.connect(('192.168.254.24', 8888))
while True:
info = input('===>:')
if not info:continue
client.send(info.encode('utf-8'))
data = client.recv(10240)
print(data.decode('utf-8'))

半双工

#全双工电话
#服务器端
import socket
import subprocess
import threading
server = socket.socket()
server.bind(('', 8888))
server.listen(5)
print('等待电话.....')
conn, addr = server.accept()
print('电话来了......')
def recv():
while True:
data = conn.recv(10240)
print(data.decode('utf-8'))
def send():
while True:
data = input('===>:')
conn.send(data.encode('utf-8'))
t1 = threading.Thread(target=recv)
t2 = threading.Thread(target=send)
t1.start()
t2.start() #客户端
import socket
import threading
client = socket.socket()
client.connect(('localhost', 8888))
def send():
while True:
info = input('===>:')
client.send(info.encode('utf-8'))
def recv():
while True:
data = client.recv(1024)
print(data.decode('utf-8')) t1 = threading.Thread(target=send)
t2 = threading.Thread(target=recv)
t1.start()
t2.start()

全双工

import socket
socket.setdefaulttimeout() host_list = ['192.168.4.145:5555','192.168.4.146:555','192.168.4.147:5555','192.168.31.199:445']
for info in host_list:
server = socket.socket()
ip = re.compile('(.*?):(.*)').search(info).group()
port = re.compile('(.*?):(.*)').search(info).group()
res = server.connect_ex((ip, int(port)))
if res == :
print('%s--%s端口正常' % (ip, port))
else:
print('%s--%s端口异常' % (ip, port))

利用socket监控端口

re模块

\w 匹配字母数字
\W 匹配非字母数字
\s 匹配任意空白字符,等价于 [\t\n\r\f].
\S 匹配任意非空字符
\d 匹配任意数字,等价于 [0-9].
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。c
\z 匹配字符串结束
\G 匹配最后匹配完成的位置。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\n, \t, 等. 匹配一个换行符。匹配一个制表符。等
\1...\9 匹配第n个分组的子表达式。
\10 匹配第n个分组的子表达式,如果它经匹配。否则指的是八进制字符码的表达式。

os模块

1、getcwd()

获取当前工作路径

import os
print(os.getcwd()) C:\python35\python3.exe D:/pyproject/day21模块/os模块.py D:\pyproject\day21模块

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

import os
print(os.getcwd())
os.chdir("test1")
print(os.getcwd()) C:\python35\python3.exe D:/pyproject/day21模块/os模块.py D:\pyproject\day21模块 D:\pyproject\day21模块\test1

3、返回上级目录用..

import os
print(os.getcwd())
os.chdir("..")
print(os.getcwd()) C:\python35\python3.exe D:/pyproject/day21模块/os模块.py D:\pyproject\day21模块 D:\pyproject

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

新建文件夹

import os
os.makedirs("gouguoqi/gouguoqi1")
os.chdir("gouguoqi/gouguoqi1")
print(os.getcwd()) C:\python35\python3.exe D:/pyproject/day21模块/os模块.py D:\pyproject\day21模块\gouguoqi\gouguoqi

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

import os
os.mkdir("gouguoqi")
os.chdir("gouguoqi")
print(os.getcwd()) C:\python35\python3.exe D:/pyproject/day21模块/os模块.py D:\pyproject\day21模块\gouguoqi

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

import os
os.rmdir("gouguoqi") OSError: [WinError 145] 目录不是空的。: 'gouguoqi'

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

import os
print(os.listdir("D:\pyproject\day21模块")) C:\python35\python3.exe D:/pyproject/day21模块/os模块.py ['module-lesson.py', '文件修改功能.py', 'day21_lesson', 'time模块.py', 'random随机模块.py', 'basedir.py', 'os模块.py', 'test1', 'gouguoqi', '查询功能.py', '三级菜单.py', 'test.py', 'sed.py', 'haproxy.cfg']

8、remove   删除指定的一个文件

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

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

import os

os.rename("gouguoqi","gouguoqinew")

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

import os
print(os.stat("gouguoqinew/testnew")) C:\python35\python3.exe D:/pyproject/day21模块/os模块.py 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命令,直接显示结果

[root@localhost python]# cat os.system.py

#!/usr/bin/env  python

# _*_ coding:utf8 _*_

import os

os.system("cd /home && ls")

[root@localhost python]# python os.system.py

python                                src

12、os.path.exists 判断路径是否存在,存在为True,不存在为False

import os
print(os.path.exists("D:\pyproject\day21模块\gouguoqinew")) C:\python35\python3.exe D:/pyproject/day21模块/os模块.py True

13、os.path.isfile 判断一个文件是否存在,存在为True,否则为False

import os
print(os.path.isfile(r"D:\pyproject\day21模块\gouguoqinew\test.py")) C:\python35\python3.exe D:/pyproject/day21模块/os模块.py True

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

import os
print(os.path.isdir(r"D:\pyproject\day21模块\gouguoqinew")) C:\python35\python3.exe D:/pyproject/day21模块/os模块.py True

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

import os
a="D:\pyproject"
b="day21模块\gouguoqinew"
print(os.path.join(a,b)) C:\python35\python3.exe D:/pyproject/day21模块/os模块.py D:\pyproject\day21模块\gouguoqinew

python之常用模块4的更多相关文章

  1. python的常用模块之collections模块

    python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块?    常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...

  2. python之常用模块

    python 常用模块 之 (subprocess模块.logging模块.re模块) python 常用模块 之 (序列化模块.XML模块.configparse模块.hashlib模块) pyth ...

  3. python之常用模块二(hashlib logging configparser)

    摘要:hashlib ***** logging ***** configparser * 一.hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法 ...

  4. Python学习——python的常用模块

    模块:用一堆代码实现了某个功能的代码集合,模块是不带 .py 扩展的另外一个 Python 文件的文件名. 一.time & datetime模块 import time import dat ...

  5. python 之常用模块

    一 认识模块 二 常用模块    (1)re模块    (2)collections模块 一  认识模块     (1)什么是模块      (2)模块的导入和使用 (1)模块是:一个模块就是一个包含 ...

  6. Python之常用模块--collections模块

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...

  7. Python自动化开发之python的常用模块

    python常用模块 模块的种类:模块分为三种,分别是自定义模块:内置标准模块(即标准库):开源模块(第三方). 以下主要研究标准模块即标准库:标准库直接导入即可,不需要安装. 时间模块:time , ...

  8. python基础----常用模块

    一 time模块(时间模块)★★★★                                                      时间表现形式 在Python中,通常有这三种方式来表示时 ...

  9. python(五)常用模块学习

    版权声明:本文为原创文章,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明. https://blog.csdn.net/fgf00/article/details/52357 ...

  10. python学习——常用模块

    在学习常用模块时我们应该知道模块和包是什么,关于模块和包会单独写一篇随笔,下面先来了解有关在python中的几个常用模块. 一.什么是模块 常见的场景:一个模块就是一个包含了python定义和声明的文 ...

随机推荐

  1. 浅析MVC模式与三层架构的区别

    浅析MVC模式与三层架构的区别 三层架构和MVC是有明显区别的,MVC应该是表现模式(三个加起来以后才是三层架构中的UI层).三层架构(3-tier application) 通常意义上的三层架构就是 ...

  2. composer的安装以及具体使用

    1. 简介 Composer 是 PHP5.3以上 的一个依赖管理工具.它允许你声明项目所依赖的代码库,它会在你的项目中为你安装他们.Composer 不是一个包管理器.是的,它涉及 "pa ...

  3. zabbix学习笔记----安装----2019.03.26

    1.zabbix官方yum源地址:repo.zabbix.com 2.安装zabbix server zabbix server使用mysql作为数据库,在zabbix 3.X版本,安装zabbix- ...

  4. MR汇聚工具步骤

    ---------------------------------MR汇聚工具步骤------------------------------------- 1.需要连上141服务器 用户:root ...

  5. vue动态绑定background:url绑不上的问题

    场景: 利用swipper做轮播图,在联调的时候发现有些图片存在有些图片不存在 原因:图片路径中存在 (),和 background:url() 会冲突 解决方法: 一:oss图片路径避免出现括号 ( ...

  6. supermap数据库型数据源的数据索引问题

    按如下方式查看帮助文档,根据不同的场景选用不同的索引

  7. 【aardio】回车换行符

    回车换行符 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字 ...

  8. 前端面试之vue相关的面试题

    hello,你们的小可爱,皮皮聪又来发表感想了. 首先简单概括下会遇到的问题: 1.vuex作用 ①vuex是一个状态管理的插件,可以解决不同组件之间的数据共享和数据持久化. ②vue中的多个组件之间 ...

  9. Sum of Subsequence Widths LT891

    Given an array of integers A, consider all non-empty subsequences of A. For any sequence S, let the  ...

  10. maven 在clean package时,出现:找不到符号 [ERROR] 符号: 方法 sqlDdlFilter(java.lang.String) 解决办法

    另一个项目中增加了,sqlDdlFilter 在调用的项目中clean package时,出现 找不到符号[ERROR] 符号: 方法 sqlDdlFilter(java.lang.String) 原 ...