gpt4 book ai didi

python - 将所有标准输出存储到文件中,同时仍将其显示在屏幕上

转载 作者:太空宇宙 更新时间:2023-11-04 07:40:38 25 4
gpt4 key购买 nike

除了python,这里似乎有所有语言的问题/答案。 (至少我没找到)

从这个问题Redirect stdout to a file in Python?我了解到,为了将所有输出从屏幕重定向到一个文件,我只需要使用:

import sys

some_list = ['elem1', 'elem2']

for elem in some_list:

sys.stdout = open(elem + '.log', 'w')

# Do lots of stuff that print messages.
print 'lots of stuff for', elem

print 'Code finished'

这会将所有输出存储到 elemx.log文件:

elem1.log
lots of stuff for elem1

elem2.log
lots of stuff for elem2
Code finished

关于这种方法我有两个问题:

1- 如何使最后一行打印行(即:Code finished)存储在为最后一个 elem 创建的文件中?

2- 如何让存储的输出同时显示在屏幕上?

最佳答案

wrapper 很性感

import sys

class Logger(file):
def __init__(self,*a,**kw):
# copy original stdout to instance
self.stdout = sys.stdout
return super(Logger,self).__init__(*a,**kw)

def write(self,data):
self.stdout.write(data) # to screen
return super(Logger,self).write(data) #to file

def writelines(self,lines):
for line in lines: self.write(line)

def close(self):
# return it back
sys.stdout = self.stdout



some_list = ['elem1', 'elem2']

for elem in some_list:
with Logger("/tmp/1/{}.log".format(elem), "w") as sys.stdout:
# Do lots of stuff that print messages.
print 'lots of stuff for', elem



print 'Code finished'

结果

$ python2 out.py 
Code finished
$ ls
elem1.log elem2.log out.py

很酷的副作用:

print 'this on screen'

with Logger("/tmp/1/main.log", "w") as sys.stdout:
print 'this on screen an in main.log'

with Logger("/tmp/1/sub.log", "w") as sys.stdout:
print 'this on screen, in man.log and in sub.log'

print 'only on screen again'

关于python - 将所有标准输出存储到文件中,同时仍将其显示在屏幕上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22674166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com