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自动化运维之常用模块的主要内容,如果未能解决你的问题,请参考以下文章