You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:45:00