【问题标题】:Linux Terminal Display and PythonLinux终端显示和Python
【发布时间】:2011-11-30 00:30:26
【问题描述】:

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

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

例如,在脚本中。我已经打印出来了:

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

格式应该在我的终端中运行良好: ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++

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

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

所以我在想:

  1. 当用户运行脚本时,我可以将 Linux 终端大小自动更改为我的声明大小
  2. 能否使用Python获取用户终端尺寸的Width和Length,让终端显示灵活
  3. 我想听听世界各地有什么更好的解决方案来解决终端显示问题!

我更喜欢 Python 中的推荐

【问题讨论】:

  • 你可能想看看this question
  • 那个问题,获取终端尺寸。最推荐什么? (很可能,为了将来的编程目的)获取终端大小或调整它的大小?
  • 获取尺寸。您无法调整终端的大小。 (好吧,也许是某些类型,但即使那样用户也不会喜欢它)
  • *喜欢* @Petr Viktorin 评论

标签: python linux terminal


【解决方案1】:

我强烈建议使用 Python 标准库的 curses 模块之类的东西来执行此操作。

不要重新发明轮子 - 使用现有库既可以帮助您避免极端情况,也可以节省您的时间。另外,*nix 用户对 curses 界面很熟悉,这会让他们更喜欢你。

【讨论】:

  • 嗯..有趣!那么 API 是自动更改终端大小还是获取终端大小?
  • curses 旨在与用户现有的终端尺寸配合使用。 (大多数人不喜欢你强迫他们的终端调整大小,有些终端甚至可能不允许你调整它们的大小。)
  • 真的,真的!某些终端无法调整大小!
  • 遗憾的是,没有(至少默认情况下)。如手册页顶部所述,它是“平台:Unix”。
  • 啧!以为我可以用石头杀死两只鸟! =P
【解决方案2】:

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

不过,您可以使用以下方法获取终端的宽度:

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

【讨论】:

    【解决方案3】:

    基于Amber's solution 中的cmets,有些人希望看到一个也适用于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 更容易。有关示例,请参见 contact list demo

    完全披露:是的 - 我是那个包的作者,所以可能有点偏颇。 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      相关资源
      最近更新 更多