Python如何将代码运行输出保存到文本文件用作日志?
问题根源
你直接替换了全局标准输出对象sys.stdout为文件对象,所有原本输出到控制台的print内容都会直接写入文件,自然控制台不会有任何内容显示。这种全局修改stdout的方式对新手不够友好,很容易出现异常退出没关闭文件、输出丢失的问题,更推荐下面两种更稳妥的实现方式。
方案1:使用print的file参数(最适合新手)
print函数自带file参数,可以直接指定内容输出到哪个文件对象,不需要修改全局输出,逻辑清晰不易出错。如果需要同时在控制台和文件保留输出,调用两次print即可:
# 先打开要写入的文件,a是追加模式,w是覆盖模式,根据需求选择 with open("test.txt", "w", encoding="utf-8") as f: date = input("The Date [Month/Day/Year]: ") print("", file=f) Name = input("Name: ") print("", file=f) Age = int(input("Age: ")) print("", file=f) Gender = input("Gender: ") print("", file=f) Nationality = input("Nationality: ") p = Age + 10 # 同时输出到控制台和文件 print(p) print(p, file=f) res = f"{date} {Name} {Age} {Gender} {Nationality}" print(res) print(res, file=f)
用
with语句管理文件对象不需要手动调用close,代码出现异常也会自动关闭文件,避免文件损坏或者内容丢失。
方案2:重定向stdout同时保留控制台输出
如果确实需要用全局重定向的方式,需要先备份原本的控制台输出对象,写完内容后恢复:
import sys # 备份原来的控制台输出 original_stdout = sys.stdout with open("test.txt", "w", encoding="utf-8") as f: # 自定义双输出类,同时写文件和控制台 class DoubleOutput: def __init__(self, out, file): self.out = out self.file = file def write(self, s): self.out.write(s) self.file.write(s) def flush(self): self.out.flush() self.file.flush() sys.stdout = DoubleOutput(original_stdout, f) # 你的原有代码 date = input("The Date [Month/Day/Year]: ") print("") Name = input("Name: ") print("") Age = int(input("Age: ")) print("") Gender = input("Gender: ") print("") Nationality = input("Nationality: ") p = Age + 10 print(p) print(date, Name, Age, Gender, Nationality) # 恢复原来的标准输出 sys.stdout = original_stdout
内容的提问来源于stack exchange,提问作者Titanium Tronic
相关产品推荐
相关产品推荐

