如何将Python脚本的屏幕输出保存到文本文件并解决TypeError报错
报错原因与修正方案
核心问题定位
- 触发
TypeError的直接原因:bios_version()函数全程没有设置返回语句,按照Python的默认规则,没有return的函数最终会返回None;执行f.write(bios_version())时等于把None传入仅接受字符串参数的文件写入方法,自然抛出类型不匹配的错误 - 代码中还有几处会导致后续运行出错的隐藏问题:
- 使用
os.path.join拼接文件路径,但从未导入os模块,运行到路径拼接步骤会抛出NameError - 手动写的文件关闭语句
f.close缺少调用括号,实际不会执行关闭动作,容易造成文件句柄泄漏、写入内容丢失 - 重复调用两次
bios_version(),会导致控制台重复打印冗余内容
- 使用
修正实现步骤
- 调整
bios_version()函数逻辑:不要只在控制台print内容,要把需要保存的信息拼接成完整字符串,在保留控制台打印效果的同时,通过return把字符串返回给主流程,方便后续做文件写入 - 补充导入缺失的
os模块 - 用Python的上下文管理器
with操作文件,自动处理文件打开、关闭的全流程,避免手动操作的疏漏;打开文件时指定utf-8编码,避免内容乱码
修正后可直接运行的代码
import platform import os def bios_version(): uname_result = platform.uname() pl = {} pl['BIOS version'] = uname_result.version # 拼接格式化的输出字符串 output_content = "\n".join([f"{item_key}: {item_val}" for item_key, item_val in pl.items()]) # 控制台正常打印内容 print(output_content) # 返回字符串供文件写入使用 return output_content # 仅调用一次函数拿到保存内容,避免重复输出 save_content = bios_version() save_path = 'D:/' name_of_file = input("What is the name of the file: ") complete_file_path = os.path.join(save_path, f"{name_of_file}.txt") # with上下文管理器自动处理文件关闭,无需手动写close with open(complete_file_path, "w", encoding="utf-8") as file_handle: file_handle.write(save_content)
补充说明:如果后续需要把脚本所有控制台输出都统一存档,也可以通过重定向标准输出流的方式实现,但对于当前只需要保存BIOS版本信息的场景,修改函数返回值的方案逻辑最清晰、调试成本最低。
内容的提问来源于stack exchange,提问作者KorD WLO
相关产品推荐
相关产品推荐

