Python 将终端 Terminal 或者控制台的输出结果输出至 log 文件 以文件形式 随时保存 追加保存

35 篇文章 0 订阅
26 篇文章 0 订阅

Python 将终端打印输出结果即时保存至 log文件

前言:

网上目前能搜到的都是,等整个程序跑完,才会在log文件中写东西,如果程序中间停止,就啥也没有了。
这明显不符合大家的需求,既然是要保存程序的打印信息,整个程序肯定是复杂,长时间,且容易报错的。
因此我想着加两个功能:
一个是随时打印,随时写到文档中;
一个是每次都在上一次程序执行结束之后,继续添加,而不是清空上次的文档。

代码:

import sys


class Logger(object):
    def __init__(self, filename='default.log', add_flag=True, stream=sys.stdout):
        self.terminal = stream
        print("filename:", filename)
        self.filename = filename
        self.add_flag = add_flag
        # self.log = open(filename, 'a+')

    def write(self, message):
    	if self.add_flag:
	        with open(self.filename, 'a+') as log:
	            self.terminal.write(message)
	            log.write(message)
        else:
	        with open(self.filename, 'w') as log:
	            self.terminal.write(message)
	            log.write(message)

    def flush(self):
        pass


def main():
    sys.stdout = Logger("b.log", sys.stdout)
    # sys.stderr = Logger("a.log", sys.stderr)     # redirect std err, if necessary
    # now it works
    print('print something')
    print("*" * 3)
    # sys.stdout.write("???")
    import time
    time.sleep(10)
    print("other things")


if __name__ == '__main__':
    main()

### 回答1: Python提供了输出重定向的功能,可将控制台输出保存文件中。 在Python中,使用sys库的stdout属性可以重定向输出。通过将stdout属性设置为一个文件对象,程序的所有输出都将被输出文件中。 举个例子,以下是将print语句的输出保存文件中的代码: ```python import sys # Open a file for writing with open("output.txt", "w") as f: # Redirect stdout to the file sys.stdout = f # Print something print("Hello world!") # Reset stdout to the console sys.stdout = sys.__stdout__ ``` 在这个例子中,我们打开了一个名为“output.txt”的文件以便写入,然后重定向了stdout属性以将输出写入该文件。我们打印了一个简单的“Hello world!”的消息,然后将stdout重置为控制台。 当代码运行后,输出将被写入到名为“output.txt”的文件中。 需要注意的是,如果同时使用了print和其他输出函数,例如logging或matplotlib,那么还需要重定向它们的输出。可以使用sys库的stderr属性来处理这种情况。 ```python import sys # Open a file for writing with open("output.txt", "w") as f: # Redirect stdout and stderr to the file sys.stdout = f sys.stderr = f # Print something print("Hello world!") # Reset stdout and stderr to the console sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ ``` 在这个例子中,我们将stderr属性设置为与stdout相同的文件,以便将所有输出写入同一个文件中,并在程序结束后重置stdout和stderr。 ### 回答2: Python 是一款多用途的脚本语言,广泛用于数据分析,网络编程,机器学习等领域。其中,在数据处理方面它特别出色。在实际开发中,我们常常需要将程序运行结果保存文件中,方便我们查看和分析。本文将介绍如何将控制台输出保存文件中。 在 Python 中,我们可以使用 sys 模块来实现将控制台输出保存文件中的功能。sys 模块是 Python 的一个内置模块,可以提供对 Python 解释器进行访问和控制。 具体实现方法如下: 1. 首先,我们需要引入 sys 模块。 ```python import sys ``` 2. 接着定义一个文件对象 file,并将标准输出 sys.stdout 重定向到该文件对象中。 ```python file = open('output.txt', 'w') sys.stdout = file ``` 其中,'output.txt' 为文件名,'w' 表示以写入模式打开文件。 3. 此时,所有通过 print() 打印出来的内容都会被输出文件中。 ```python print("Hello World") print("Python is great") ``` 4. 最后,我们需要将标准输出重定向回控制台,否则后续 print() 函数的调用仍然会将结果输出文件中。 ```python sys.stdout = sys.__stdout__ # 将标准输出重定向回控制台 file.close() # 关闭文件 ``` 以上就是将控制台输出保存文件中的完整步骤。通过这种方法,我们可以将 Python 程序输出的结果保存文件中,方便我们查看和分析。 ### 回答3: 有时候我们需要在程序运行结束后查看运行过程中的控制台输出。将控制台输出保存文件是一种常见的方式。 Python提供了将控制台输出保存文件的方法,可以使用标准库中的sys模块以及文件读写模块进行实现。具体步骤如下: 1. 引入sys模块 首先要导入sys模块,因为在sys模块中有一个stdout属性,可以用于重定向标准输出。 ``` import sys ``` 2. 打开文件 接下来需要打开一个文件,用于保存控制台输出。 ``` output_file = open('output.txt', 'w') ``` 其中,'output.txt'为文件名,'w'表示以写入方式打开文件,如果文件不存在则创建,如果文件存在则覆盖原有内容。 3. 重定向标准输出 接下来需要将标准输出重定向至文件。 ``` sys.stdout = output_file ``` 4. 将控制台输出保存文件 接下来就可以运行程序,所有标准输出都会被重定向至文件程序运行结束后,需要将sys.stdout重新指向控制台输出。 ``` #运行程序 print('Hello, World!') #将sys.stdout重新指向控制台输出 sys.stdout = sys.__stdout__ ``` 5. 关闭文件 最后要记得关闭文件。 ``` output_file.close() ``` 将控制台输出保存文件是一种非常实用的技巧,在程序调试和输出结果查看方面都具备一定的帮助作用。掌握这种方法能为你的Python开发带来很大的便利。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hehedadaq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值