python 的内置模块
1.logging模块
logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比print,具备如下优点:
- 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;
- print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则可以由开发者决定将信息输出到什么地方,以及怎么输出;
日志系统通常有下面几种级别,看情况是使用
- FATAL - 导致程序退出的严重系统级错误,不可恢复,当错误发生时,系统管理员需要立即介入,谨慎使用。
- ERROR - 运行时异常以及预期之外的错误,也需要立即处理,但紧急程度低于FATAL,当错误发生时,影响了程序的正确执行。需要注意的是这两种级别属于服务自己的错误,需要管理员介入,用户输入出错不属于此分类。
- WARN - 预期之外的运行时状况,表示系统可能出现问题。对于那些目前还不是错误,然而不及时处理也会变成错误的情况,也可以记为WARN,如磁盘过低。
- INFO - 有意义的事件信息,记录程序正常的运行状态,比如收到请求,成功执行。通过查看INFO,可以快速定位WARN,ERROR, FATAL。INFO不宜过多,通常情况下不超过TRACE的10%。
- DEBUG - 与程序运行时的流程相关的详细信息以及当前变量状态。
- TRACE - 更详细的跟踪信息。DEBUG和TRACE这两种规范由项目组自己定义,通过该种日志,可以查看某一个操作每一步的执行过程,可以准确定位是何种操作,何种参数,何种顺序导致了某种错误的发生
logging模块的使用:
输出结果为:
应为默认界别为error,所以debug、info界别的信息不打印出来,但是我们可以更改级别打印信息,
输出结果为:
我们也可以更改日志的格式和保存为文件:
输出结果为:
formatter,定义了最终log信息的顺序,结构和内容
%(name)s Logger的名字
%(levelname)s 文本形式的日志级别
%(message)s 用户输出的消息
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(levelno)s 数字形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
2.os模块
我们经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路径进行操作,这就依赖于os模块。
os.getcwd():查看当前所在路径。
os.listdir(path):列举目录下的所有文件。返回的是列表类型。
输出结果为:
os.path.abspath(path):返回path的绝对路径。
os.path.join(path1,path2,...):将path进行组合,若其中有绝对路径,则之前的path将被删除。
os.path.exists(path):文件或文件夹是否存在,返回True 或 False。输出结果为:
os.path.splitext(‘path‘) 把文件的后缀名和前面分开,返回一个tuple
os.path.split(‘path’) 把最后的一个目录或者文件和前面的目录分开,返回一个tuple
输出结果为:
3.random模块
random.random() 0-1之间的随机浮点数
random.uniform(a, b) a到b之间的随机浮点数
random.randint(a, b) a到b之间的随机整数
输出结果为:
random.randrange(a, b, c) 结果相当于从[a, a+c, a+2c,....,c]序列中获取一个随机数。
random.sample(sequence, num) 在sequence之间随机提取num个字符
输出结果为:
4.string模块
string.ascii_letters # 打印出大小写字母 string.ascii_lowercase # 打印小写字母 string.ascii_uppercase # 打印大写字母 string.punctuation # 打印特殊字符 string.printable #打印所有字符
输出结果为:
我们可以使用这个打印出6位数验证码:
输出结果为:
5.subprocess模块
在一些复杂场景中,我们需要将一个进程的执行输出作为另一个进程的输入。在另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令等。这个时候我们就需要使用到suprocess的Popen()方法。该方法有以下参数:
args:shell命令,可以是字符串,或者序列类型,如list,tuple。
bufsize:缓冲区大小,可不用关心
stdin,stdout,stderr:分别表示程序的标准输入,标准输出及标准错误
shell:与上面方法中用法相同
cwd:用于设置子进程的当前目录
env:用于指定子进程的环境变量。如果env=None,则默认从父进程继承环境变量
universal_newlines:不同系统的的换行符不同,当该参数设定为true时,则表示使用\n作为换行符
输出结果为:
使用shell指令的时候需要加上shell=Ture,这样就不会报错啦