6.4 软件开发目录规范

软件(例如:ATM)目录应该包含:

文件名 存放 备注
bin start.py,用于起动程序  
core src.py,程序核心功能代码  
conf settings.py, 程序配置信息  
db db.txt 数据库信息  
lib common.py ,存放常用功能  
log access.log ,存放记录  

start.py :

import sys,os                                   #应该把项目的根目录添加到环境变量中
BASE_DIR=os.path.dirname(os.path.dirname(__file__)#os.path.dirname(__file__) 获取当前文件上一级路径名
sys.path.append(BASE_DIR) #拿到ATM所在的文件夹
from core import src
​
src.run()

sys.path.append(r'D:\code\SH_fullstack_s1\day15\ATM') 添加的是绝对路径,不支持移植到别的硬件上运行

src.py :

from conf import settings
from lib import common
​
logger1=common.get_logger('atm')
​
def login():
print('登录....')
with open(settings.DB_PATH,encoding='utf-8') as f:
for line in f:
print(line)
​
def register():
print('注册....')
​
def shop():
print('购物....')
​
def pay():
print('支付...')
​
def transter():
print('转账...')
common.logger('xxxx给他爹xx转账10000')
logger1.debug('xxxx给他爹xx转账10000')
logger1.error('xxxx给他爹xx转账10000,转账失败')
​
def run():
while True:
print("""
1 登录
2 注册
3 购物
4 支付
5 转账
""")
​
choice=input('>>: ').strip()
if choice == '':
login()
elif choice == '':
register()
elif choice == '':
shop()
elif choice == '':
pay()
elif choice == '':
transter()
else:
print('输入错误指令')

src.py

settings.py:

DB_PATH=r'D:\code\SH_fullstack_s1\day15\ATM\db\db.txt' #自定义设置的文件路径
LOG_PATH=r'D:\code\SH_fullstack_s1\day15\ATM\log\access.log'
LOGGING_DIC = {.....} #log配置字典

common.py :

from conf import settings
​
def logger(msg):
with open(settings.LOG_PATH,'a',encoding='utf-8') as f:
f.write('%s\n' %msg)
​ import logging.config
import logging
from conf import settings
​
def get_logger(name): #name='atm'
logging.config.dictConfig(settings.LOGGING_DIC) # 导入上面定义的logging配置
l1=logging.getLogger(name)
return l1

6.5 logging 模块

import logging
logging.basicConfig( #为logging模板指定全局配置,针对所有logger有效,控制打印到文件中
filename='access.log', # /stream=sys.stdout 打印在屏幕上,但和filename只能存在其一
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
level=40
)
logging.debug('debug...') #
logging.info('info....') #
logging.warning('.....') #
logging.error('......') #
logging.critical('.....') #

6.51 logging模块的四类对象

logger:负责产生日志

logger1=logging.getLogger('xxx')
filter:过滤日志(不常用) handler:控制日志打印到文件or终端 fh1=logging.FileHandler(filename='a1.log',encoding='utf-8')
fh2=logging.FileHandler(filename='a2.log',encoding='utf-8')
sh=logging.StreamHandler()
formatter:控制日志的格式 formatter1=logging.Formatter(
fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
)
​
formatter2=logging.Formatter(fmt='%(asctime)s - %(message)s',)

logger ---->多个file handler <----多个formatter

绑定关系:

1.为logger1对象绑定handler:

logger1.addHandler(fh1)
logger1.addHandler(fh2)
logger1.addHandler(sh)
2.为handler对象绑定日志格式 fh1.setFormatter(formatter1)
fh2.setFormatter(formatter1)
sh.setFormatter(formatter2)
设定日志级别: 两层关卡,必须都通过,日志才能正常记录 logger1.setLevel(10)
fh1.setLevel(10)
fh2.setLevel(10)
sh.setLevel(10)
​
#调用logger1对象下的方法,产生日志,然后交给不同的handler,控制日志记录到不同的地方
logger1.debug('调试信息') #调用logger1,产生日志

日志的继承

import logging
logger1=logging.getLogger('xxx')
logger2=logging.getLogger('xxx.son')
logger3=logging.getLogger('xxx.son.grandson')
​
sh=logging.StreamHandler()
​
formatter2=logging.Formatter(fmt='%(asctime)s - %(message)s',)
​
sh.setFormatter(formatter2)
​
logger1.addHandler(sh)
logger2.addHandler(sh)
logger3.addHandler(sh)
​
logger1.setLevel(10)
logger2.setLevel(10)
logger3.setLevel(10)
sh.setLevel(10)
​
logger1.debug('测试。。。。')
logger2.debug('测试。。。。')
logger3.debug('测试。。。。')

python 之 软件开发目录规范 、logging模块的更多相关文章

  1. Python模块:Re模块、附软件开发目录规范

    Re模块:(正则表达式) 正则表达式就是字符串的匹配规则 正则表达式在多数编程语言里都有相应的支持,Python里面对应的模块时re 常用的表达式规则:(都需要记住) “ . ”   #  默认匹配除 ...

  2. python模块导入-软件开发目录规范-01

    模块 模块的基本概念 模块: # 一系列功能的结合体 模块的三种来源 """ 模块的三种来源 1.python解释器内置的模块(os.sys....) 2.第三方的别人写 ...

  3. python基础语法10 函数递归,模块,软件开发目录规范

    函数递归: 函数递归指的是重复 “直接调用或间接调用” 函数本身, 这是一种函数嵌套调用的表现形式. 直接调用: 指的是在函数内置,直接调用函数本身. 间接调用: 两个函数之间相互调用间接造成递归. ...

  4. Python 浅谈编程规范和软件开发目录规范的重要性

    最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是觉得注释和命名规范的重要性了,因为几乎每个字符都要咨询他,用老师的话来说,这就是命名不规范的后续反应.所以此时的我意识到写一篇关于注释程序的重要 ...

  5. py 包和模块,软件开发目录规范

    目录 py 包和模块,软件开发目录规范 什么是包? 什么是模块? 软件开发目录规范 py 包和模块,软件开发目录规范 什么是包? 包指的是内部包__init__.py的文件夹 包的作用: 存放模块,包 ...

  6. python浅谈编程规范和软件开发目录规范的重要性

    前言 我们这些初学者,目前要做的就是遵守代码规范,这是最基本的,而且每个团队的规范可能还不一样,以后工作了,尽可能和团队保持一致,目前初学者就按照官方的要求即可 新人进入一个企业,不会接触到核心的架构 ...

  7. Python记录13:软件开发目录规范

    软件开发目录规范 开发一个软件,一个工程项目,一般应该具备以下的几个基本的文件夹和模块,当然,这并不是一成不变的,根据项目的不同会有一定的差异,不过作为一个入门级的新手,建议暂时按照以下的规范编写: ...

  8. day21 模块与包+软件开发目录规范

    目录 一.导入模块的两种方式 二.模块搜索的路径的优先级 三.循环导入 四.区分py文件的两种用途 五.编写一个规范的模板 五.包 1 什么是包 2 为什么要有包 3 包的相关使用 3.1 在当前文件 ...

  9. 软件开发目录规范 ATM框架构建

    软件开发的目录规范 建立文件夹 为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要.软件的目录规范并无硬性标准,只要清晰可读即可 以ATM购物车项目为例: 首 ...

随机推荐

  1. 登录令牌 Token 介绍

     Token值介绍 token 值: 登录令牌.利用 token 值来判断用户的登录状态.类似于 MD5 加密之后的长字符串. 用户登录成功之后,在后端(服务器端)会根据用户信息生成一个唯一的值.这个 ...

  2. PAT 甲级 1116. Come on! Let's C (20) 【循环判断】

    题目链接 https://www.patest.cn/contests/pat-a-practise/1116 思路 注意一个细节 如果没有本来 ID 的 后来又查了这个ID 不是输出 checked ...

  3. 【LeetCode-easy】Merge Two Sorted Lists

    思路:指针p用于串联怎个链表,比较两个指针的大小,连接较小的一个.如果一个链表到达链尾,连接另外一个链表余下来的所以节点. public ListNode mergeTwoLists(ListNode ...

  4. 【LeetCode】两个有序数组合成一个有序数组

    a = [1,3,5,7,9]b = [2,4,6,8,10]c= [] while len(a) > 0: if len(b) == 0: c.extend(a) break min_num ...

  5. Appium——元素定位

    首先介绍两种定位元素的工具,appium自带的 Inspector 和 android SDK自带的 uiautomatorviewer 1.UIAutomator Viewer比较简单,在模拟器打开 ...

  6. Spring Boot2.0之Admin-UI分布式微服务监控中心

    前面https://www.cnblogs.com/toov5/p/9823353.html  说的很不好用哈哈 还需要json格式化 我们可以用Admin-UI 比较爽歪歪 原理: 将所有服务的监控 ...

  7. malloc和new的区别是什么?

    http://zhidao.baidu.com/link?url=iUDUZeJtj1o12PvUETLlJgvAMqzky5HxGCJRGnULpsO8HdWAdjKkQqGCJ9-o-aTu8NP ...

  8. leetcode 66. Plus One(高精度加法)

    Given a non-negative number represented as an array of digits, plus one to the number. The digits ar ...

  9. 使用TortoiseGit同步代码到github远程仓库

    1.clone github上的代码仓库的URL 可以用HTTPS,SSH, or Subversion 2.同步push 到远程仓库时 要用 SSH地址,同生成SSH private key ,在g ...

  10. HDU5875Function(单调队列)

    The shorter, the simpler. With this problem, you should be convinced of this truth.      You are giv ...