Python脚本终端日志转存文本文件遇执行中断问题求助
解决Python脚本日志保存到文件的问题
嘿,我来帮你搞定这个问题!你遇到的情况其实是script命令的工作机制导致的——它会启动一个全新的交互式shell会话,你的Python脚本会被挂起,直到这个shell关闭,所以后面的代码根本没机会运行。而且单独调用subprocess.call(['exit'])也没用,因为exit是shell内置命令,subprocess会把它当作外部程序查找,必然报错。
下面给你几个可行的解决方案,从最推荐的原生方法到替代方案都有:
方案一:使用Python内置logging模块(最推荐)
这是Python处理日志的标准方式,能同时把日志输出到终端和文件,还支持日志级别、格式化等高级功能,完全不需要依赖外部命令。
示例代码:
import logging # 配置日志:同时输出到控制台和文件 logging.basicConfig( level=logging.INFO, # 设置日志级别,低于INFO的日志不会输出 format='%(asctime)s - %(levelname)s - %(message)s', # 日志格式 handlers=[ logging.FileHandler('logfile.txt'), # 写入到日志文件 logging.StreamHandler() # 输出到终端 ] ) # 替换原来的print语句,用logging输出日志 logging.info("这是一条普通运行日志") logging.warning("这是一条警告信息") logging.error("这是一条错误日志") # 如果要保留print语句,也可以,不过统一用logging更规范 print("这条print内容也会被终端显示,但不会写入日志文件,建议替换成logging.info")
方案二:重定向标准输出/错误到文件
如果不想大规模修改代码,只是想把所有终端输出(包括print内容和报错信息)保存到文件,可以直接重定向sys.stdout和sys.stderr。
只保存到文件(终端不显示)
import sys # 保存原始输出流,方便后续恢复 original_stdout = sys.stdout original_stderr = sys.stderr # 打开日志文件,将stdout和stderr定向到文件 with open('logfile.txt', 'a', encoding='utf-8') as log_file: sys.stdout = log_file sys.stderr = log_file # 这里写你的脚本核心代码 print("这条内容会被写入日志文件") # 报错信息也会被写入,比如下面的除以0错误 # 1 / 0 # 恢复原始输出流,后续内容可以回到终端显示 sys.stdout = original_stdout sys.stderr = original_stderr print("这条内容只会在终端显示,不会写入日志")
同时显示在终端和保存到文件
如果想要像script那样同时输出到终端和文件,可以自定义一个类似tee命令的类:
import sys class TeeStream: def __init__(self, filename): self.log_file = open(filename, 'a', encoding='utf-8') self.original_stream = sys.stdout def write(self, data): self.log_file.write(data) self.original_stream.write(data) self.flush() def flush(self): self.log_file.flush() self.original_stream.flush() # 应用TeeStream到stdout和stderr sys.stdout = TeeStream('logfile.txt') sys.stderr = TeeStream('logfile.txt') # 测试输出 print("这条内容同时显示在终端和写入日志文件") # 错误信息也会同时处理 # 1 / 0
方案三:用script命令包裹脚本启动(外部调用)
如果坚持想用script命令,不要在脚本内部调用,而是在终端启动脚本时用script包裹:
script logfile.txt python your_script.py
这样整个Python脚本的运行过程都会被script记录到logfile.txt里,脚本也能正常执行,不会被挂起。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

