python运维脚本常用库使用
一、命令行工具
1.1 获取命令行参数
import sys
print(sys.argv())
sys.argv
返回参数列表,列表中第一个值是当前运行脚本的名称
1.2 使用标准输入/输出
通过sys.stdin
、sys.stdout
、sys.stderr
函数分别读取标准输入、输出、错误
1.3 解析INI结构配置文件
使用ConfigParser
模块解析INI结构配置文件:
import configparser
## ----------------读取INI文件-------------------
## new ConfigParser对象,允许选项值为空
config = configparser.ConfigParser(allow_no_value=True)
## 读取配置文件
config.read('/path/to/fimename')
## 获取所有章节,返回章节名的列表
config.sections()
## 判断章节是否存在
config.has_section(section)
## 获取某个章节下的所有选型
config.options(section)
## 判断某个章节下某个选项是否存在
config.has_option(section, option)
## 获取某个章节下某个选项的值
config.get(section, option)
## ----------------修改INI文件-------------------
## 删除某个章节
config.remove_section(section)
## 添加新的章节
config.add(section)
## 删除某个章节下的某个选项
config.remove_option(section, option)
## 添加/修改选项
config.set(section, option, value)
## 保存配置文件
config.write(open('/save/to/path', 'w'))
二、日志
2.1 简单使用
通过logging.basicConfig
函数配置日志级别、输出目的地及输出格式,三个参数可缺省
import logging
logging.basicConfig(
level=,
format=,
filename=
)
logging.info('this is a test')
2.2 通过配置文件配置日志
logging模块中概念:
-
Logger :日志记录器,是应用程序中能直接使用的接口;
-
Handler :日志处理器,用以表明将日志保存到什么地方以及保存多久;
-
Form atter :格式化,用以配置日志的输出格式。
在典型的使用场景中,一个日志记录器使用一个日志处理器, 一个日志处理器使用一个日志格式化。
2.2.1 编写配置文件
- 定义日志记录器、日志处理器、日志格式化器的引用名
- 关系绑定
[loggers]
keys = loggerName
[handlers]
keys = handlerName
[formatters]
keys = formatName
[logger_loggerName]
handlers = handlerName
[handle_handlerName]
class=
args=
level=
formatter=formatName
[formatter_formatName]
format=
2.2.2 启用配置
import logging.config
logging.config.fileConfig(filename)
三、文件系统管理
3.1 路径操作
import os
## 获取当前路径
os.getcwd()
## 打印指定路径下所有的文件及目录,默认是当前目录
os.listdir()
## 拼接路径
os.join(path1, path2,...)
## 获取绝对路径
os.path.abspath()
## 获取相对路径
os.path.realpath(path, startPath)
## 获取当前文件所在目录和文件名,第一个参数是目录第二个参数是文件名
os.path.split()
## 返回文件所在目录
os.path.dirname()
## 返回文件名
os.path.basename()
## 返回文件名及扩展名
os.path.splitext()
## 遍历目录树,返回迭代对象
## 每次迭代返回一个三元组(当前路径、当前路径下所有的目录名,当前路径下的所有文件名)
os.path.walk()
3.2 判断文件类型
## 判断文件是否存在
os.path.exists()
## 判断文件是否存在以及是否一个文件
os.path.isfile()
## 判断文件是否存在以及是否一个目录
os.path.isdir()
3.3 文件的复制、增删
import os
import shutil
## 递归创建目录
os.makedirs()
## 移动/修改文件名
shutil.move(src, dst)
## 删除单个文件
os.remove()
## 删除目录树,os.rmdir要求必须空目录
shutil.rmtree
四、文件解压缩
import os
import zipfile
def compress(src, out):
with zipfile.ZipFile(out, 'w', zipfile.ZIP_DEFLATED) as f:
for path, dirs, files in os.walk(os.path.abspath(src)):
for file in files:
filename = os.path.join(path, file)
arcname = os.path.relpath(filename, os.path.abspath(src))
## filename指待压缩文件路径,arcname指压缩后显示的文件名
## 为避免创建中间目录,使用相对路径名
f.write(filename=filename, arcname=arcname)
五、读取Excel文件
5.1 读取Excel文件
import openpyxl
## 加载表格
## 可以设置为只读模式,加快读取速度
workbook = openpyxl.load_workbook(excelName)
## 获取工作表
## 获取当前激活的工作表
sheet = workbook.active
## 获取所有工作表
sheet = workbook.worksheets()
## 根据工作表名获取工作表对象
sheet = wokrdboot[sheetname]
## 获取单元格
## 根据坐标获取单元格
cell = sheet[坐标]
## 获取某列或某行的所有单元格
cells = sheet[列/行号]
## 遍历所有行,每次迭代返回当前行的所有单元格
sheet.iter_rows
## 获取单元格值
cell.value
5.2 保存Excel文件
workbook.save(filename)
六、HTTP网络请求
6.1 Request和Response类
-
requests.request(method, url, **kwargs)
方法参数:method -- 新的方法 Request 对象: GET , OPTIONS , HEAD , POST , PUT , PATCH 或 DELETE .
url -- 网址
params -- (可选)字典、要在查询字符串中发送的元组或字节列表
data -- (可选)要在正文中发送的字典、元组列表、字节或类似文件的对象
json -- (可选)要在主体中发送的JSON可序列化python对象
headers -- (可选)要与发送的HTTP头的字典
cookies -- (可选)要与一起发送的dict或cookiejar对象
files -- (可选)字典 'name': file-like-objects (或) {{'name': file-tuple}} ) for multipart encoding upload. file-tuple 可以是2元组 ('filename', fileobj) ,三元组 ('filename', fileobj, 'content_type') 或四元组 ('filename', fileobj, 'content_type', custom_headers) 在哪里 'content-type' 是定义给定文件的内容类型的字符串,并且 custom_headers 一个类似dict的对象,包含要为文件添加的附加头。
auth -- (可选)auth tuple以启用基本/摘要/自定义http auth。
timeout (float or tuple) -- (可选)在放弃前等待服务器发送数据的秒数,以浮点形式,或 (connect timeout, read timeout) 元组。
allow_redirects (bool) -- (可选)布尔值。启用/禁用get/options/post/put/patch/delete/head重定向。默认为 True .
proxies -- (可选)字典映射协议到代理的URL。
verify -- (可选)或者是一个布尔值,在这种情况下,它控制我们是验证服务器的TLS证书,还是一个字符串,在这种情况下,它必须是要使用的CA束的路径。默认为 True .
stream -- (可选) False ,将立即下载响应内容。
cert -- (可选)如果为字符串,则为SSL客户端证书文件(.pem)的路径。如果tuple(‘cert’,‘key’)对。
-
requests.Response
对象属性及方法-
close()
释放回池的连接。一旦调用此方法
raw
不能再次访问对象。注意:通常不需要显式调用。 -
content
响应的内容(字节)。
-
cookies
服务器发送回的一罐cookie。
-
encoding
访问r.text时要解码的编码。
-
headers
响应头的不区分大小写字典。例如,
headers['content-encoding']
将返回'Content-Encoding'
响应头。 -
json(**kwargs)
返回响应的JSON编码内容
-
ok
返回true,
status_code
小于400,否则为假。此属性检查响应的状态代码是否在400和600之间,以查看是否存在客户端错误或服务器错误。如果状态代码介于200和400之间,则返回true。这是 not 检查响应代码是否为200 OK
. -
raise_for_status
-
reason
响应HTTP状态的文本原因,例如“未找到”或“确定”。
-
request
这个
PreparedRequest
此为响应的对象。 -
status_code
响应HTTP状态的整数代码,例如404或200。
-
text
响应的内容(Unicode)。如果response.encoding为none,则使用
chardet
.响应内容的编码仅基于HTTP头,遵循RFC2616到字母。如果您可以利用非HTTP知识更好地猜测编码,那么应该设置r.encoding
在访问此属性之前。 -
url
响应的最终URL位置
-
6.2 get请求
requests.get(url, param={}, headers={})
6.3 post请求
## 发送键值对
requests.post(url, headers={}, data={})
## 发送json格式正文
## json参数会自动将字典类型转我json字符串
##或者使用json.dumps手动转为字符串传给data参数
requests.post(url, header={}, json={})