程序完成后如何将控制台打印到文本文件(Python)?

Moh*_*esr 5 python console save text-files

我有一个程序,通过print语句将许多计算结果输出到控制台。我想编写一些代码以将控制台的所有内容导出(或保存)到一个简单的文本文件中。

我搜索了StackOverflow和其他站点,但发现了一些方法来重定向打印语句以直接打印到文件,但是我希望程序正常运行,将输出显示到控制台,然后在程序所有操作之后保存其内容完成。

我正在将PyCharm与Python2.7结合使用

Moh*_*esr 0

衷心感谢和尊重所有对这个问题做出贡献的人。我终于找到了解决这个问题的方法,对我的原始代码进行了最小的修改。该解决方案由成员@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)

我测试了这个,它工作得很好,最后我在程序结束后克隆了控制台的输出。

向大家致以最诚挚的问候,并非常感谢所有贡献者。