Дисплей терминала Linux и Python - PullRequest
5 голосов
/ 03 октября 2011

Я пишу скрипт Python для распечатки отображаемого пользовательского интерфейса. Проблема в том, что у каждого пользователя Linux будет свой собственный уникальный размер терминала. Это приведет к тому, что жестко заданный пользовательский интерфейс выйдет из формата.

(Если примеров много, терминал выглядит сумасшедшим !!!).

Пример, в скрипте. У меня есть распечатка:

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

Формат должен хорошо работать в моем терминале: ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++

Когда терминал меньше, формат распечатки заканчивается. Формат стал: ++++++++++++++++++++++++++++++++++++++++++++

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

Вот я и думаю:

  1. Когда пользователь запускает скрипт, могу ли я автоматически изменить размер терминала Linux на мой объявленный размер
  2. Можно ли получить ширину и длину размера пользовательского терминала с помощью Python, чтобы дисплей терминала мог быть гибким
  3. Мне бы хотелось услышать лучшее решение по всему миру для решения проблемы с отображением терминала!

Я бы настоятельно предпочел рекомендации в Python

Ответы [ 3 ]

8 голосов
/ 03 октября 2011

Я бы настоятельно рекомендовал использовать для этого что-то вроде модуля curses в стандартной библиотеке Python.

Не изобретайте велосипед - использование существующей библиотеки поможет вам избежать угловых случаев, а также сэкономит ваше время. Кроме того, интерфейс curses знаком пользователям * nix, что делает их такими, как вы.

1 голос
/ 03 октября 2011

Как и предполагалось Amber , вам следует использовать библиотеку типа curses.

Тем не менее, вы можете получить ширину терминала, используя что-то вроде этого:

import subprocess
int(subprocess.Popen(['tput', 'cols'], stdout=subprocess.PIPE).stdout.read())
0 голосов
/ 15 апреля 2016

Исходя из комментариев Решение 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)

Этот пакет также предоставляет множество высокоуровневых виджетов для упрощения полноэкранного текстового интерфейса. См. Пример списка контактов .

Полное раскрытие: да - я являюсь автором этого пакета, и поэтому могу быть немного предвзятым. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...