gpt4 book ai didi

python - 终端最后一行的 apt-like 进度

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:29 24 4
gpt4 key购买 nike

我想编写一个 python 脚本,在终端的最后一行显示其当前进度,类似于 apt(不是 apt-get)的行为方式。我知道有 ANSI 控制序列可以与终端交互,但问题是我想调用其他程序(使用 subprocess)产生自己的输出。我不希望这些程序覆盖我的进度。

可能有多个子进程同时运行。我正在使用 多线程 模块,每个线程做一些工作,然后调用并等待一个子进程,然后进行清理工作。我不介意混合子进程的输出,只要保留最后一行即可。

当程序退出时,最后一行应该被清除。

最佳答案

感谢PM 2Ring's comment ,我找到了我需要的一切。

控制序列"\033[X;Yr"(或"\x1b[X;Yr")告诉终端只滚动行 XY。我没有测试 X != 0 时会发生什么,因为我想保持回滚缓冲区原样。 \033[r 重置终端以滚动整个窗口。

要动态,您应该确定终端的高度,然后减去所需的静态行数,然后适当设置滚动范围。

为避免乱码输出,在设置滚动范围后应确保光标不在静态区域中。例如,您的窗口有大小 [w=120,h=40] 行并且您想要 2 个静态状态行。确定光标位置(例如 [x=5,y=39]),如果它在窗口的最后两行内,则打印 2 个换行符,然后将光标定位在 [x=5, y=(h-2) =38].

要更新状态区,保存光标位置,将其移动到状态行,清除状态行,打印状态(不带尾随换行符),恢复光标位置。有转义序列来保存和恢复位置。重置滚动范围时清除状态区。

有用的链接:

关于python - 终端最后一行的 apt-like 进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47205923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com