Как получить ширину окна консоли Linux в Python - PullRequest
225 голосов
/ 19 февраля 2009

Есть ли в python способ программно определять ширину консоли? Я имею в виду количество символов, которые помещаются в одну строку без переноса, а не ширина окна в пикселях.

Редактировать

Ищите решение, которое работает в Linux

Ответы [ 14 ]

1 голос
/ 22 декабря 2015

Если вы используете Python 3.3 или выше, я бы рекомендовал встроенный get_terminal_size(), как уже рекомендовано. Однако, если вы застряли в более старой версии и хотите простой кроссплатформенный способ сделать это, вы можете использовать asciimatics . Этот пакет поддерживает версии Python до 2.7 и использует опции, аналогичные предложенным выше, чтобы получить текущий размер терминала / консоли.

Просто создайте свой класс Screen и используйте свойство dimensions, чтобы получить высоту и ширину. Доказано, что это работает в Linux, OSX и Windows.

О - и полное раскрытие здесь: я автор, поэтому, пожалуйста, не стесняйтесь открывать новый выпуск, если у вас есть какие-либо проблемы, чтобы заставить это работать.

1 голос
/ 23 декабря 2014

Попробуйте "благословения"

Я искал то же самое. Он очень прост в использовании и предлагает инструменты для окраски, укладки и позиционирования в терминале. То, что вам нужно, так же просто, как:

from blessings import Terminal

t = Terminal()

w = t.width
h = t.height

Работает как прелесть в Linux. (Я не уверен насчет MacOSX и Windows)

Скачать и документацию здесь

или вы можете установить его с помощью pip:

pip install blessings
1 голос
/ 22 июля 2014
Ответ

@ reannual работает хорошо, но есть проблема с ним: os.popen устарела . Вместо этого следует использовать модуль subprocess, так что вот версия кода @ reannual, которая использует subprocess и прямо отвечает на вопрос (давая ширину столбца непосредственно как int:

import subprocess

columns = int(subprocess.check_output(['stty', 'size']).split()[1])

Протестировано на OS X 10,9

0 голосов
/ 19 апреля 2011

Вот версия, которая должна быть совместима с Linux и Solaris. Основано на сообщениях и комментариях от madchine . Требуется модуль подпроцесса.

def termsize():
    import shlex, subprocess, re
    output = subprocess.check_output(shlex.split('/bin/stty -a'))
    m = re.search('rows\D+(?P\d+); columns\D+(?P\d+);', output)
    if m:
        return m.group('rows'), m.group('columns')
    raise OSError('Bad response: %s' % (output))
>>> termsize()
('40', '100')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...