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

Mac系统下如何将交互式Python日志脚本输出同步到终端和文本文件

解决方案汇总

方案1:直接用shell命令实现(无需修改Python脚本,无需额外编写shell脚本)

直接用tee命令配合Python的无缓冲模式运行即可,tee命令原生支持把输入内容同时输出到终端(标准输出)和指定文件:

python -u your_script.py 2>&1 | tee output.log

参数说明:

  • -u 参数让Python关闭标准输出、标准错误的行缓冲,确保交互式输入提示、运行日志能实时输出到终端,不会出现输出卡顿延迟的问题
  • 2>&1 作用是把标准错误(报错、警告信息)也合并到标准输出流中,确保异常信息也能被保存到日志文件
  • tee output.log 会把所有输出同时打印到终端和写入output.log文件;如果需要追加内容而不是覆盖旧日志,替换为tee -a output.log即可

方案2:封装为独立shell脚本

如果需要频繁调用该Python脚本,可以把逻辑封装成固定的shell脚本,比如新建run_with_log.sh,内容如下:

#!/bin/bash
# 替换为你的Python脚本实际路径
PY_SCRIPT="./your_interactive_script.py"
# 替换为你要保存的日志文件路径
LOG_FILE="./python_run_log.log"

echo "脚本启动,日志将同步输出到终端和 $LOG_FILE"
python -u "$PY_SCRIPT" 2>&1 | tee "$LOG_FILE"
echo "脚本运行结束,完整日志已保存至 $LOG_FILE"

给脚本添加执行权限:chmod +x run_with_log.sh
之后直接运行./run_with_log.sh即可,交互式输入功能完全不受影响。

可选方案:修改Python脚本自身实现双输出

如果你不想依赖shell工具,也可以直接在Python脚本开头添加双输出逻辑,原有脚本业务代码不需要做任何修改:

import sys

class DualOutput:
    def __init__(self, log_path):
        self.terminal = sys.stdout
        self.log_file = open(log_path, "a", encoding="utf-8")
    
    def write(self, message):
        self.terminal.write(message)
        self.log_file.write(message)
        self.flush()
    
    def flush(self):
        self.terminal.flush()
        self.log_file.flush()

# 替换标准输出、标准错误流
sys.stdout = DualOutput("output.log")
sys.stderr = DualOutput("output.log")

添加完成后直接运行Python脚本,输出就会同时打印到终端和写入日志文件,交互式输入功能可正常使用。

内容的提问来源于stack exchange,提问作者BTBts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:57:05