【韦德国际1946手机版】Python内置模块logging用法实

作者: 韦德国际1946手机版  发布:2019-06-03

正文实例讲述了Python内置模块logging用法。分享给我们供大家参谋,具体如下:

本文实例讲述了Python日志模块logging基本用法。分享给大家供大家参考,具体如下:

本文实例讲述了Python unittest模块用法。分享给我们供大家参谋,具体如下:

本文实例讲述了Python hashlib模块用法。分享给大家供大家参考,具体如下:

一、将日志直接出口到显示屏

一. 基础用法

python的unittest模块提供了四个测试框架,只要我们写一个连任unittest.TestCase的类,类中用setUp做初阶化,用tearDown做清理。

一、hashlib基本使用

import logging
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
# 默认情况下,logging将日志打印到屏幕,日志级别为WARNING;
#output====================================
# WARNING:root:This is warning message

python提供了2个正经的日志接口,正是logging模块。日志等第有DEBUG、INFO、WAOdysseyNING、ERRORAV四、C奥迪Q三ITICAL多种(品级依次上涨),分别对应的函数为debug()info()warning()error()critical()

首要运用的函数有:

python中的hashlib模块用来开始展览hash大概md5加密,而且这种加密是不可逆的,所以这种算法又被称呼摘要算法。其辅助Openssl库提供的具备算法,包涵md伍、sha1、sha2二四、sha25六、sha51贰等。

二.由此logging.basicConfig函数对日记的输出格式及情势做相关陈设

>>> import logging
>>> logging.debug("ni hao")
>>> logging.info("ni hao2")
>>> logging.warning("ni hao")
WARNING:root:ni hao
>>> logging.error("ni hao")
ERROR:root:ni hao
>>> logging.critical("ni hao")
CRITICAL:root:ni hao
>>>

failedinfo表示不树立打字与印刷消息failedinfo,为可选参数
self.fail([【韦德国际1946手机版】Python内置模块logging用法实例深入分析,hashlib模块用法实例分析。msg])会白白的产生测试败北,不推荐使用。
self.assertEqual(value1, value2, failedinfo) # 断言value1 == value2
self.assertTrue(表达式, failedinfo) # 断言value为真
self.assertFalse(表达式, failedinfo) # 断言value为假
# 断言分明产生特别,若是没发出非凡,则为测试战败。
# 参数一为极度,参数贰为抛出极度的调用对象,剩余参数为传送给可调用对象的参数。
self.assertRaises(ValueError, self.widget.resize, -1, -1)
调用时机的加self,如self.assertEqual(self.seq, range(十)),self.assertTrue(value > 100)

常用的性质和方式:

import logging
logging.basicConfig(level=logging.DEBUG,
        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
        datefmt='%a, %d %b %Y %H:%M:%S',
        filename='myapp.log',
        filemode='w')
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
#./myapp.log文件中内容为:
#Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message
#Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message
#Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message

能够窥见debug()info()措施未有显得此外音讯,那是因为私下认可的日志品级是WA大切诺基NING,所以低于此级其余日记不会记录。

更详实的课程见:

algorithms:列出全体加密算法('md伍','sha1','sha2二肆','sha25陆','sha3八肆','sha51二')
digesti_size:发生的散列的字节大小
md伍()/sha壹():创设三个md5只怕sha一加密方式的hash对象
update(arg):用字符串参数来更新hash对象,假使同三个has对象重复调用该办法,如下:m.update(a); m.update(b),则相当于m.update(a b)
digest():重返摘要,作为2进制数据字符串值
hexdigest():重临摘要,作为十陆进制数据字符串值
copy():复制

logging.basicConfig参数:

能够利用函数basicCinfig修改日志等级

Python代码:

下边是三个简短的加密示例:

#logging.basicConfig函数各参数:
filename: 钦赐日志文件名
filemode: 和file函数意义一样,内定日志文件的开采方式,'w'或'a'
format: 钦命输出的格式和情节,format能够出口诸多有用音信,如上例所示:
    %(levelno)s:     打字与印刷日志等级的数值
    %(levelname)s:     打字与印刷日志级外堪称
    %(pathname)s:     打字与印刷当前进行顺序的门路,其实就是sys.argv[0]
    %(filename)s:     打字与印刷当前实践顺序名
    %(funcName)s:     打字与印刷日志的当下函数
    %(lineno)d:     打字与印刷日志的最近行号
    %(asctime)s:     打字与印刷日志的时刻
    %(thread)d:     打字与印刷线程ID
    %(threadName)s: 打印线程名称
    %(process)d:     打字与印刷进度ID
    %(message)s:     打字与印刷日志音信
datefmt:     钦点时期格式,同time.strftime()
level:         设置日志等第,默以为logging.WA中华VNING
stream:     钦命将日志的输出流,能够钦命输出到sys.stderr,sys.stdout或然文件,暗中认可输出到sys.stderr,当stream和filename同有的时候间指定时,stream被忽视

>>> import logging
>>> logging.basicConfig(level=logging.INFO)
>>> logging.info("nihao")
INFO:root:nihao
>>> logging.debug("dfasl")
>>> logging.basicConfig(level=logging.DEBUG)
>>> logging.info(4)
INFO:root:4
>>>
#coding=utf-8
import random
import unittest
class TestSequenceFunctions(unittest.TestCase):
  def setUp(self):
    self.seq = range(10)
  def test_shuffle(self):
    # make sure the shuffled sequence does not lose any elements
    random.shuffle(self.seq)
    self.seq.sort()
    self.assertEqual(self.seq, range(10))
    # should raise an exception for an immutable sequence
    self.assertRaises(TypeError, random.shuffle, (1,2,3))
  def test_choice(self):
    element = random.choice(self.seq)
    self.assertTrue(element in self.seq)
  def test_sample(self):
    with self.assertRaises(ValueError):
      random.sample(self.seq, 20)
    for element in random.sample(self.seq, 5):
      self.assertTrue(element in self.seq)
results_fields = [
  ("username", unicode),
  ("showid", unicode),
  ("total_pv", int),
  ("pubdate", unicode),
  ("tags", list),
  ("showname", unicode),
  ("pg", int),
  ("ext", str),
]
results_fields_map = dict(results_fields)
class TestDictValueFormatFunctions(unittest.TestCase):
  def setUp(self):
    self.results = [{
      "username": u"疯狂豆花",
      "showid": u"130e28f0fe0811e0a046",
      "total_pv": 14503214,
      "pubdate": u"2012-07-07 01:22:47",
      "tags": [
        "轩辕剑",
        "天之痕"
        ],
      "showname" : u"轩辕剑之天之痕",
      "pg" : 1,
      "ext" : "mp4"
    }
    ]
  def test_format(self):
    self.assertTrue(isinstance(self.results, list), "self.results's type must be dict but got {0}".format(type(self.results)))
    for r in self.results:
      for f in results_fields_map:
        value = r.get(f, None)
        self.assertTrue(isinstance(value, results_fields_map[f]), u"{0}'s type must be {1} but got {2}".format(value, results_fields_map[f], type(value)))
        #self.assertTrue(isinstance(value, results_fields_map[f]))
  def test_value(self):
    for r in self.results:
      self.assertEqual(r["pg"], 1)
      self.assertEqual(r["ext"], u"mp4")
if __name__ == '__main__':
  # unittest.main() # 用这个是最简单的,下面的用法可以同时测试多个类
  # unittest.TextTestRunner(verbosity=2).run(suite1) # 这个等价于上述但可设置verbosity=2,省去了运行时加-v
  suite1 = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions)
  suite2 = unittest.TestLoader().loadTestsFromTestCase(TestDictValueFormatFunctions)
  suite = unittest.TestSuite([suite1, suite2])
  unittest.TextTestRunner(verbosity=2).run(suite)
import hashlib
m = hashlib.md5()
m.update('how to use md5'.encode('utf-8'))
m.update('in python hashlib'.encode('utf-8'))
print m.hexdigest()

三、将日志同一时间输出到多个Handler

basicConfig()函数还足以定义越多的剧情,如

运作结果:

再次来到值如下:

先定义贰个住handler,并行使addHander()加上到主handler,实现日志输出到三个handler.

复制代码 代码如下:

test_choice (__main__.TestSequenceFunctions) ... ok
test_sample (__main__.TestSequenceFunctions) ... ok
test_shuffle (__main__.TestSequenceFunctions) ... ok
test_format (__main__.TestDictValueFormatFunctions) ... ok
test_value (__main__.TestDictValueFormatFunctions) ... ok


Ran 5 tests in 0.013s

OK

9f97604918a2e86bfcc4aea5c35a4c8b

本文由韦德国际1946发布于韦德国际1946手机版,转载请注明出处:【韦德国际1946手机版】Python内置模块logging用法实

关键词: 新伟德官网