Linux终端显示与Python

6 投票
3 回答
2458 浏览
提问于 2025-04-17 03:35

我正在写一个Python脚本,用来打印出可以显示的用户界面。问题是每个Linux用户的终端大小都不一样,这样的话我写死的用户界面就会变得不合适。

(如果下面有很多例子,终端看起来会很疯狂!)

比如,在我的脚本中,我打印出来的内容是:

print "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"

在我的终端中,格式应该是这样的:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

但是当终端变小的时候,打印出来的格式就会乱掉。

格式变成:

++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++

所以我在想:

  1. 当用户运行这个脚本时,我能不能自动把Linux终端的大小改成我设定的大小?
  2. 我能不能用Python获取用户终端的宽度和长度,这样终端显示就可以更灵活?
  3. 我想听听世界上有没有更好的解决方案来解决终端显示的问题!

我特别希望能得到Python方面的建议。

3 个回答

0

根据Amber的解决方案中的评论,有人希望看到一个也能在Windows上运行的解决方案。一个简单的跨平台解决方案是使用asciimatics。比如:

from asciimatics.screen import Screen

def demo(screen):
    screen.print_at('+' * screen.width, 0, 0)
    screen.refresh()
    sleep(10)

Screen.wrapper(demo)

这个包还提供了很多高级的组件,可以让全屏文本用户界面变得更简单。想看看例子的话,可以查看联系人列表演示

坦白说:没错,我是这个包的作者,所以可能会有点偏心。:-)

1

正如Amber所建议的,你可以使用一个叫做curses的库。

不过,你也可以用下面这种方法来获取终端的宽度:

import subprocess
int(subprocess.Popen(['tput', 'cols'], stdout=subprocess.PIPE).stdout.read())
8

我强烈建议你使用像Python标准库中的curses模块来完成这个任务。

别自己重新发明轮子——使用现成的库可以帮你避免一些特殊情况,还能节省时间。而且,curses这个界面对使用*nix系统的人来说很熟悉,这样他们会更喜欢你。

撰写回答