Moh*_*esr 5 python console save text-files
我有一个程序,通过print语句将许多计算结果输出到控制台。我想编写一些代码以将控制台的所有内容导出(或保存)到一个简单的文本文件中。
我搜索了StackOverflow和其他站点,但发现了一些方法来重定向打印语句以直接打印到文件,但是我希望程序正常运行,将输出显示到控制台,然后在程序所有操作之后保存其内容完成。
我正在将PyCharm与Python2.7结合使用
衷心感谢和尊重所有对这个问题做出贡献的人。我终于找到了解决这个问题的方法,对我的原始代码进行了最小的修改。该解决方案由成员@Status 提供,这里是其链接。
虽然我在发布问题之前进行了很多搜索,但受人尊敬的成员的回答启发了我进行精确搜索,特别是@turkus 的贡献,他做了出色的工作,以及 @Glostas 使我大开眼界,看到了“tee”,引导我找到我发布的解决方案(尽管它不包含“tee”)。
解决方案,如上述帖子所示,稍作修改:
1-将以下类放入程序中:
class Logger(object):
"""
Lumberjack class - duplicates sys.stdout to a log file and it's okay
source: /sf/answers/1720828581/
"""
def __init__(self, filename="Red.Wood", mode="a", buff=0):
self.stdout = sys.stdout
self.file = open(filename, mode, buff)
sys.stdout = self
def __del__(self):
self.close()
def __enter__(self):
pass
def __exit__(self, *args):
pass
def write(self, message):
self.stdout.write(message)
self.file.write(message)
def flush(self):
self.stdout.flush()
self.file.flush()
os.fsync(self.file.fileno())
def close(self):
if self.stdout != None:
sys.stdout = self.stdout
self.stdout = None
if self.file != None:
self.file.close()
self.file = None
Run Code Online (Sandbox Code Playgroud)
2- 在程序的开头,在任何打印语句之前,放置以下行:
my_console = Logger('my_console_file.txt') # you can change the file's name
Run Code Online (Sandbox Code Playgroud)
3- 在程序末尾,在所有 print 语句之后,放置以下行:
my_console.close()
Run Code Online (Sandbox Code Playgroud)
我测试了这个,它工作得很好,最后我在程序结束后克隆了控制台的输出。
向大家致以最诚挚的问候,并非常感谢所有贡献者。