如何在Python中獲得Linux控制台窗口寬度


Answers

不知道為什麼它在模塊shutil ,但它在Python 3.3中找到, 查詢輸出終端的大小

>>> import shutil
>>> shutil.get_terminal_size((80, 20))  # pass fallback
os.terminal_size(columns=87, lines=23)  # returns a named-tuple

os模塊中有一個低級實現。

Python 3.2及以下版本現在可以使用backport:

Question

有沒有辦法在Python中以編程方式確定控制台的寬度? 我的意思是適合一行但不包裝的字符數,而不是窗口的像素寬度。

編輯

尋找一種適用於Linux的解決方案







當您調用此腳本時,如果沒有控制終端,此處的許多Python 2實現將失敗。 你可以檢查sys.stdout.isatty()來確定它是否實際上是一個終端,但是這將排除大量的情況,所以我相信找出終端大小的最pythonic方法是使用內置的curses包。

import curses
w = curses.initscr()
height, width = w.getmaxyx()



@ reannual的答案效果很好,但是有一個問題: os.popen 現在已被棄用 。 應該使用subprocess進程模塊,所以這裡是@ reannual的代碼版本,它使用subprocess進程並直接回答問題(通過直接將列寬作為int

import subprocess

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

測試OS X 10.9




這是一個應該兼容Linux和Solaris的版本。 基於madchine的帖子和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')



嘗試“祝福”

我正在尋找同樣的東西。 它非常易於使用,並提供終端著色,造型和定位工具。 你需要的是如此簡單:

from blessings import Terminal

t = Terminal()

w = t.width
h = t.height

像Linux中的魅力一樣工作。 (我不確定MacOSX和Windows)

here下載和文檔

或者你可以用pip安裝它:

pip install blessings



上面的代碼在我的linux上沒有返回正確的結果,因為winsize-struct有4個無符號短褲,而不是2個簽名短褲:

def terminal_size():
    import fcntl, termios, struct
    h, w, hp, wp = struct.unpack('HHHH',
        fcntl.ioctl(0, termios.TIOCGWINSZ,
        struct.pack('HHHH', 0, 0, 0, 0)))
    return w, h

hp和hp應該包含像素寬度和高度,但不包含。