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

如何通过Python代码调整Mac终端窗口尺寸

Python修改Mac终端尺寸实现方案

该需求完全可以实现,不存在技术层面的不可行限制,之前尝试os库相关逻辑失败,大多是踩了终端缓冲区、运行环境适配的坑,不是功能本身无法做到。

Mac端可用实现方法

方法1:ANSI转义序列实现(无依赖、兼容性最好)

Mac自带的Terminal.app、第三方iTerm2都支持标准终端控制转义序列,不需要安装任何第三方库即可实现尺寸调整:

import sys

def resize_mac_terminal(cols: int, rows: int):
    # 终端尺寸调整转义码格式:\033[8;<行数>;<列数>t
    sys.stdout.write(f"\033[8;{rows};{cols}t")
    # 必须强制刷新输出缓冲区,否则转义码不会被终端解析
    sys.stdout.flush()

# 调用示例:将终端调整为120列宽、40行高
resize_mac_terminal(120, 40)

方法2:os库调用stty命令(适配tty原始模式)

如果你的小游戏需要切换终端到原始模式(实现无需回车的即时按键响应),可以通过os模块调用系统原生stty指令调整尺寸:

import os

def resize_tty_mode(rows: int, cols: int):
    tty_fd = os.open(os.ctermid(), os.O_RDWR)
    os.system(f"stty rows {rows} cols {cols}")
    os.close(tty_fd)

跨平台兼容写法(适配Windows/Mac/Linux)

针对你做ASCII小游戏需要跨系统格式化显示的需求,可以加系统判断分支做统一封装:

import sys
import os

def set_terminal_size(cols: int, rows: int):
    if sys.platform in ("darwin", "linux"):
        # Mac/Linux走ANSI转义序列逻辑
        sys.stdout.write(f"\033[8;{rows};{cols}t")
        sys.stdout.flush()
    elif sys.platform.startswith("win"):
        # Windows走系统控制台指令
        os.system(f"mode con: cols={cols} lines={rows}")

常见踩坑说明

  • 不要在IDE内置终端面板中测试效果:PyCharm、VSCode等IDE的内置运行终端会拦截终端控制转义序列,必须在系统原生终端中运行才能看到尺寸调整效果
  • 如果项目使用curses库做终端UI开发,直接调用库自带的curses.resizeterm(rows, cols)方法即可,不需要自行实现转义逻辑
  • 调整完尺寸后建议延迟100ms再渲染ASCII艺术内容,避免终端窗口未完成resize就渲染导致排版错位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:54:52