Python自动化运维之常用模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python自动化运维之常用模块相关的知识,希望对你有一定的参考价值。

一、configparser模块

1、配置文件格式如下:

# 用户信息
; 用户信息
[tom]
user=tom
passwd:123
age=18
is_admin=true
salary=31
[jack]
user=jack
passwd:123
age=18
is_admin=true
salary=31

总结:配置文件中使用"[]"来写下面的配置的标题,注释信息可以使用“#”和“;”来进行,赋值使用“key = value”或者“key:value”两种形式

2、读取配置文件:

"""
a.conf文件内容
# 用户信息
; 用户信息
[tom]
user=tom
passwd:123
age=18
is_admin=true
salary=31
[jack]
user=jack
passwd:123
age=18
is_admin=true
salary=31
"""
# 导入configparser模块
import configparser
# 生成config对象
config=configparser.ConfigParser()
# 用config对象读取配置文件
config.read(‘a.conf‘,encoding="utf-8")
#查看所有的标题
res=config.sections() # [‘tom‘, ‘jack‘]
print(res)
# 查看标题tom下所有key=value的key
options=config.options(‘tom‘)
print(options)  # [‘user‘, ‘passwd‘, ‘age‘, ‘is_admin‘, ‘salary‘]
#查看标题jack下所有key=value的(key,value)格式
item_list=config.items(‘jack‘)
print(item_list)   # [(‘user‘, ‘jack‘), (‘passwd‘, ‘123‘), (‘age‘, ‘18‘), (‘is_admin‘, ‘true‘), (‘salary‘, ‘31‘)]
#查看标题tom下user的值=>字符串格式
user=config.get(‘tom‘,‘user‘)
print(user)    # tom
#查看标题tom下age的值=>整数格式
age=config.getint(‘tom‘,‘age‘)
print(age)    # 18
#查看标题tom下is_admin的值=>布尔值格式
admin=config.getboolean(‘tom‘,‘is_admin‘)
print(admin)  # True
#查看标题tom下salary的值=>浮点型格式
salary=config.getfloat(‘tom‘,‘salary‘)
print(salary) # 31.0

3、修改配置文件

# 导入configparser模块
import configparser
# 生成config对象
config=configparser.ConfigParser()
# 用config对象读取配置文件
config.read(‘a.conf‘)
# 删除整个标题tom
config.remove_section("tom")
# 删除标题jack下的某个user和age
config.remove_option(‘jack‘,‘user‘)
config.remove_option(‘jack‘,‘age‘)
# 判断是否存在某个标题
print(config.has_section(‘tom‘))   # False
# 判断标题jack下是否有passwd
print(config.has_option("jack",‘passwd‘))  # True
# 添加一个标题tom
config.add_section(‘tom‘)
# 在标题egon下添加name=tom,age=18的配置
config.set("tom",‘name‘,‘tom‘) # 第一个tom为标题,name为key,第二个tom为value
config.set(‘tom‘,‘age‘,"18")   #必须是字符串,否则报错
# 最后将修改的内容写入文件,如果文件不存在则会创建文件,完成最终的修改
config.write(open(‘b.cfg‘,‘w‘))

=====深入了解============
好多软件的常见文档格式如下,文件名为test.ini:

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
[bitbucket.org]
User = hg
[topsecret.server.com]
Port = 50022
ForwardX11 = no

php.ini文件的格式也是如此

[PHP]
engine = On
short_open_tag = Off
asp_tags = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[Date]
[filter]
[iconv]
[intl]
[sqlite]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = Off
session.bug_compat_warn = Off
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatability_mode = Off
mssql.secure_connection = Off
[Assertion]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]

1. 获取所有节点

import configparser
config=configparser.ConfigParser()
config.read("php.ini",encoding="utf-8")
item_list=config.sections()
print(item_list)

‘‘‘

打印结果:
[‘bitbucket.org‘, ‘topsecret.server.com‘]

‘‘‘

2. 获取指定节点下所有的键值对

import configparser
config=configparser.ConfigParser()
config.read(‘test.ini‘,encoding=‘utf-8‘)
res=config.items(‘bitbucket.org‘)
print(res)

‘‘‘

打印结果:(包含DEFAULT以及bitbucket.org这俩标题下所有的items)
[(‘serveraliveinterval‘, ‘45‘), (‘compression‘, ‘yes‘), (‘compressionlevel‘, ‘9‘), (‘forwardx11‘, ‘yes‘), (‘user‘, ‘hg‘)]

‘‘‘

3. 获取指定节点下所有的建

import configparser
config=configparser.ConfigParser()
config.read("test.ini",encoding="utf-8")
key=config.options("bitbucket.org")
print(key)

‘‘‘

打印结果:(包含DEFAULT以及bitbucket.org这俩标题下所有的键)
[‘user‘, ‘serveraliveinterval‘, ‘compression‘, ‘compressionlevel‘, ‘forwardx11‘]

‘‘‘

4 获取指定节点下指定key的值

import configparser
config=configparser.ConfigParser()
config.read(‘test.ini‘,encoding=‘utf-8‘)
res1=config.get(‘bitbucket.org‘,‘user‘)
res2=config.getint(‘topsecret.server.com‘,‘port‘)
res3=config.getfloat(‘topsecret.server.com‘,‘port‘)
res4=config.getboolean(‘topsecret.server.com‘,‘ForwardX11‘)
print(res1)
print(res2)
print(res3)
print(res4)

‘‘‘

打印结果:
hg
50022
50022.0
False

‘‘‘

5. 检查、删除、添加节点

import configparser
config=configparser.ConfigParser()
config.read(‘test.ini‘,encoding=‘utf-8‘)
# 检查
has_sec=config.has_section(‘bitbucket.org‘)
print(has_sec) #打印True
# 添加节点
try:
    config.add_section(‘egon‘) # 已经存在则报错,使用异常处理解决此问题
except configparser.DuplicateSectionError:
    print("Section ‘egon‘ already exists")
config[‘egon‘][‘username‘]=‘egon‘
config[‘egon‘][‘age‘]=‘18‘
config.write(open(‘test.ini‘,‘w‘))
# 删除节点
config.remove_section(‘egon‘)
config.write(open(‘test.ini‘,‘w‘))

6. 检查、删除、设置指定组内的键值对

import configparser
config=configparser.ConfigParser()
config.read(‘test.ini‘,encoding=‘utf-8‘)
# 检查
has_sec=config.has_option(‘bitbucket.org‘,‘user‘) #bitbucket.org下有一个键user
print(has_sec) #打印True
# 删除
config.remove_option(‘DEFAULT‘,‘forwardx11‘)
config.write(open(‘test.ini‘,‘w‘))
# 设置
config.set(‘bitbucket.org‘,‘user‘,‘gangdang‘)
config.write(open(‘test.ini‘,‘w‘))

7. 使用字典数值类型创建example.ini配置文件

二、OS模块

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: (‘.‘)
os.pardir  获取当前目录的父目录字符串名:(‘..‘)
os.makedirs(‘dirname1/dirname2‘)    可生成多层递归目录
os.removedirs(‘dirname1‘)    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir(‘dirname‘)    生成单级目录;相当于shell中mkdir dirname
os.rmdir(‘dirname‘)    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(‘dirname‘)    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat(‘path/filename‘)  获取文件/目录信息
os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘
os.system("bash command")  运行shell命令,直接显示
os.environ  获取系统环境变量
os.path.abspath(path)  返回path规范化的绝对路径
os.path.split(path)  将path分割成目录和文件名二元组返回
os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小

三、sys模块

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0)
sys.version        获取Python解释程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称


本文出自 “炫维” 博客,请务必保留此出处http://xuanwei.blog.51cto.com/11489734/1953465

以上是关于Python自动化运维之常用模块的主要内容,如果未能解决你的问题,请参考以下文章

Python自动化运维之常用模块—logging

自动化运维之saltstack

自动化运维之saltstack常用模块使用之file

Ansible自动化运维之ansible命令运行方式及常用参数和常用模块

Python自动化运维之内置模块

Python自动化运维之2