2011-10-03 87 views
5

我正在编写一个Python脚本来打印出可显示的用户界面。问题是每个Linux用户都有自己独特的终端大小。这将导致硬编码的用户界面走出格式。Linux终端显示和Python

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

示例,在脚本中。我打印出来:

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

格式应远远在我的终端: +++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++

当终端较小,打印输出格式将用完。 格式变成: ++++++++++++++++++++++++++++++++++++++++++++

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

所以我想:

  1. 当用户运行脚本,我可以自动更改Linux终端大小为我的声明大小
  2. 我可以使用Python获取用户终端大小的宽度和长度,因此终端显示屏可以灵活使用
  3. 我想听任何BETT呃解决世界各地解决终端显示问题!

我强烈希望建议在Python

+0

你可能想看看[这个问题](http://stackoverflow.com/questions/566746/how-to-get-console-window-width-in-python)。 –

+0

这个问题,得到终端的大小。最值得推荐的是什么? (很可能,为了将来编程的目的)获取终端大小或调整它的大小? – Ezylryb

+0

获取大小。您无法调整终端大小。(好吧,也许有些类型,但即使那时用户也不会喜欢它) –

回答

8

我强烈建议使用类似Python标准库的curses模块来做到这一点。

不要重新发明轮子 - 使用现有的图书馆既可以帮助您避免角落案件,也可以节省您的时间。此外,curses界面对于* nix用户来说是熟悉的,这将使他们更像你。

+0

嗯..有趣!那么API自动更改终端大小还是获取终端大小? – Ezylryb

+0

'curses'旨在与用户现有的终端大小无关。 (大多数人不喜欢你强迫他们的终端进行调整,有些终端甚至不允许你调整他们的大小。) – Amber

+0

没错,真的!有些终端不能调整大小! – Ezylryb

1

由于建议使用Amber,所以应该使用类似curses的库。

不过,你可以使用这样的事情得到了终端的宽度:

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

酷!我会尝试! – Ezylryb

0

基于对Amber's solution评论,还有就是看太在Windows上运行的解决方案的一些愿望。一个简单的跨平台解决方案是使用asciimatics。例如:

from asciimatics.screen import Screen 

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

Screen.wrapper(demo) 

该软件包还提供了一整套高级小部件,使全屏文本用户界面更容易。示例请参见contact list demo

完全披露:是的 - 我是该软件包的作者,因此可能有点偏颇。 :-)