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 输出记录到文件方法怎么变都可以。。。能达到目的就可以了。。,谢谢大家热心解答!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.