python软件开发目录_python 之 软件开发目录规范 、logging模块

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

绑定关系:

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模块:Re模块、附软件开发目录规范

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Python全栈之路----常用模块----软件开发目录规范

目录基本内容 log  #日志目录 conf  #配置目录 core/luffycity  #程序核心代码目录  #luffycity 是项目名,建议用小写 libs/modules  #内置模块 d ...

随机推荐

PHP cURL 使用cookie 模拟登录

cURL是什么 cURL: http://php.net/manual/zh/book.curl.php PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务 ...

WEB开发中的字符集和编码

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

Oracle Contact By的使用

1.概述 Oracle “CONNECT BY”是层次查询子句,一般用于树状或者层次结果集的查询 2.使用方式 2.1.通过Connect by 生成序列 Oracle 构造一个月份的天数 ) s_d ...

Linux下命令sort, uniq

标题:sort, uniq 一.sort命令的使用       1. 作用:sort命令顾名思意,其可以帮助我们进行排序,而且可以依据不同的数据类型来排序.例如数字和文字的排序就不一样,sort可以指 ...

6月A项目的总结

对JS效果的要求有几点: 1.顶部导航栏鼠标经过动画. 2.Slider轮播图带有左右箭头,底部有缩略图,缩略图和大图都会自动播放. 3.右侧有个三个按钮的导航菜单,第一个按钮回到整个页面顶部,第二个 ...

走进C标准库(6)——"string.h"中函数的实现memchr

我写的memchr: void *memchr(const void *buf, char ch, unsigned count){ unsigned ; while(*(buf++) != ch & ...

[Swift]LeetCode18. 四数之和 | 4Sum

Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums s ...

pyenv安装

petalinux-config出错 以为是pyenv的问题,后发现不是,把pyenv的安装卸载总结如下: 折腾了半天发觉是安装了pyenv导致的python版本混乱,卸载后问题解决了.(卸载过程见h ...

mingw 构建 Geos

简述 在做某个小程序时候用到了QT,而用的Qt是mingw版本的,所以使用mingw构建了一下geos库. 1.准备工作 首先需要先安装好mingw,这里直接使用http://www.mingw-w6 ...

关于easyui表格右侧多出来的那一列。

关于easyui表格右侧多出来的那一列,如下图,是给滚动条预留的位置,easyui表格默认就有的. 如果想要不显示:打开jQuery.easyui.min.js文件,找到wrap.width();所在 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值