Linux终端显示和Python

6
我正在编写一个Python脚本来打印可显示的用户界面。问题是每个Linux用户都会有自己独特的终端尺寸。这将导致硬编码的用户界面失去格式。
(如果下面有很多例子,终端看起来很疯狂!)。
例如,在脚本中,我已经打印出了:
print "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"

在我的终端中,格式应该很好:

当终端较小时,打印格式将超出范围。格式变为:

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

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

所以我在想:

  1. 当用户运行脚本时,我能否自动更改Linux终端大小为我的声明大小?
  2. 我是否可以使用Python获取用户终端大小的宽度和长度,以便终端显示可以灵活?
  3. 我希望听到世界各地解决终端显示问题的更好的解决方案!

我强烈推荐使用Python进行推荐。


你可能想看一下这个问题:https://dev59.com/G3RB5IYBdhLWcg3wn4jc。 - Petr Viktorin
那个问题,获取终端大小。什么是最推荐的?(很可能是为了未来的编程目的)获取终端大小还是调整它? - Ezylryb
获取尺寸。您无法调整终端的大小。(也许某些类型可以,但即使如此,用户也不会喜欢它) - Petr Viktorin
*喜欢* @Petr Viktorin 评论 - Ezylryb
3个回答

8
我强烈建议使用类似于Python标准库的curses模块来完成此操作。
不要重复造轮子 - 使用现有的库将帮助您避免边角情况,并节省时间。此外,curses接口对于*nix用户来说是一种熟悉的界面,这将使他们更喜欢您。

嗯,有趣!那么API是自动更改终端大小还是获取终端大小? - Ezylryb
curses旨在与用户现有的终端大小配合使用。(大多数人不喜欢你强制调整他们的终端大小,有些终端甚至可能不允许你调整它们。) - Amber
真的,没错!有些终端无法调整大小! - Ezylryb
1
很遗憾,没有(至少默认情况下)。正如手册页面顶部所述,“平台:Unix”。 - Amber
啧啧!本以为我可以一箭双雕呢!=P - Ezylryb
谢谢你的推荐,@Amber。我会试一下!^_^ - Ezylryb

1

正如Amber所建议的那样,您应该使用像curses这样的库。

不过,您也可以使用类似以下代码来获取终端的宽度:

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

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)

该软件包还提供了许多高级小部件,使全屏文本 UI 更容易。 请参见 联系人列表演示 以获取示例。

完整披露:是的 - 我是该软件包的作者,所以可能有点偏见。 :-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接