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. map select reduce

    map: 针对每个element进行变换并返回整个修改后的map a.map do |item| a.upcase end a.map(&:upcase) 一样的效果, &:代表了it ...

  2. Java一致性的实现

    一致性     内存模型 每一个线程有一个工作内存和主存独立 工作内存存放主存中变量的值的拷贝     Happen Before 1.程序次序规则:在一个单独的线程中,按照程序代码的执行流顺序,(时 ...

  3. 解决webpack不能匹配post请求的问题

    解决webpack不能匹配post请求的问题 webpack的dev-server只能匹配get请求,在本地做本地数据的时候会很不方便. 可以使用如下两种办法解决: 1.在webpack.config ...

  4. poj 1469 COURSES (二分图模板应用 【*模板】 )

    COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18454   Accepted: 7275 Descript ...

  5. web tools for sublime

    Your code editor is your main development tool; you use it to write and save lines of code. Write be ...

  6. CI公用模型

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /** * SEO管理系统 -- 公用模型 ...

  7. C#高性能Socket服务器SocketAsyncEventArgs的实现(IOCP)

    网址:http://blog.csdn.net/zhujunxxxxx/article/details/43573879 引言 我一直在探寻一个高性能的Socket客户端代码.以前,我使用Socket ...

  8. POJ1195Mobile phones (从二维树状数组到cdq分治)

    Suppose that the fourth generation mobile phone base stations in the Tampere area operate as follows ...

  9. OGG 11g Checkpoint 详解

    OGG Checkpoint 详解   定位中断的位置,下次启动从中断的位置开始恢复.     1.target  端配置: 2.一条记录对应一个replicat   一. Extract Check ...

  10. Python创建删除文件

    Python代码如下: import os directory = "E:\\学习日志\\" os.chdir(directory) # 改变当前工作目录 cwd = os.get ...