1、我是用这个函数把 String 变量写入到文件的( String 主要是 html 网页代码,需要把内容转成 UTF-8,所以根据网上的例子,做了 sys.stdout,不过这个函数保存其它文本也有用到,反正是一直以来都没啥问题)
#String 写入到 file
def saveStrtoFiles(ffname,ffpath,tmpStr):
fullpath = ffpath + ffname
sys.stdout = sys.__stdout__ = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8', line_buffering=True)
with codecs.open(fullpath, 'a+', encoding='utf-8') as f:
f.write(tmpStr + '\r\n')
return fullpath
2、最近需要把 print 输出的内容写入到一个.log 文件里,我用了这个函数来完成
#记录控制台内容的函数
def consoleLog(logfilespath):
class Logger(object):
def __init__(self, filename="Default.log"):
self.terminal = sys.stdout
self.log = open(filename, "a")
def write(self, message):
self.terminal.write(message)
self.log.write(message)
def flush(self):
pass
sys.stdout = Logger(logfilespath)
pass
3、最近起用了上面第 2 点的记录日志函数,以前做好的 saveStrtoFiles 函数就有方法错误,提示 io 的问题:
#建立输出日志
SomeFunc.consoleLog((os.path.join(tarPath + ID+ '/') + ID + '.log'))
File "D:\Test\SomeFunc.py", line 154, in saveStrtoFiles
sys.stdout = sys.__stdout__ = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8', line_buffering=True)
AttributeError: 'Logger' object has no attribute 'detach'
4、请问大家,我应该如何绕开这个坑呢? 首要保证 saveStrtoFiles 存 UTF-8 的方式不变以免造成影响,print 输出记录到文件方法怎么变都可以。。。能达到目的就可以了。。,谢谢大家热心解答!
1
conn4575 2019-09-17 18:35:10 +08:00
你要了解一下 logging 模块的用法,里面的 LoggerHandler 就是控制日志输出位置的组件,里面的 BasicHandler 和 FileHandler 就是你想要的
|
2
izoabr 2019-09-17 18:35:15 +08:00
威什么不直接用 logging 模块?
|
3
qsnow6 2019-09-17 18:55:05 +08:00
所以说,要熟读官方的文档,python 早期非常受欢迎的一大原因,就是它自带的 battery 非常好用
|
4
loryyang 2019-09-17 19:02:00 +08:00
重复造轮子了?
|
5
xiaofengchen 2019-09-18 08:51:21 +08:00
def log(*args, **kwargs):
with open('a.log', 'a', encoding='utf-8') as f: print(*args, file=f, **kwargs) |
6
BingoXuan 2019-09-18 13:59:31 +08:00
|