我見過一些關於如何以列和行數獲得終端大小的文章和答案。我可以以像素爲單位獲取終端大小,或者等同於終端中使用的字體大小嗎?如何以像素爲單位獲取終端大小或字體大小?
(我寫等效因爲終端寬度[像素] =字體寬度[像素] *的列數。或者說是我的意思由終端寬度。)
我正在尋找一個這種方式可以在linux上與python 2一起工作,但我確實很感謝只適用於python 3的答案。謝謝!
我見過一些關於如何以列和行數獲得終端大小的文章和答案。我可以以像素爲單位獲取終端大小,或者等同於終端中使用的字體大小嗎?如何以像素爲單位獲取終端大小或字體大小?
(我寫等效因爲終端寬度[像素] =字體寬度[像素] *的列數。或者說是我的意思由終端寬度。)
我正在尋找一個這種方式可以在linux上與python 2一起工作,但我確實很感謝只適用於python 3的答案。謝謝!
也許吧。如果您的終端軟件支持XTerm Control Sequences,那麼序列號\e[14t
將以像素爲單位給出尺寸寬*高。
相關:
因此,您已經知道如何獲取字符中的終端大小(here)。
恐怕這是不可能的。 TTY是一個文本終端,不能控制它在哪裏運行。 因此,如果您的控制檯程序在終端中執行,您無法知道它在哪裏顯示。
但是,您可以使用圖形模式來控制字體,顯示等。 但爲什麼終端?你可以使用GUI。
在linux中存儲終端信息的數據結構是terminfo。這是任何通用終端查詢將從中讀取的結構。它不包含像素信息,因爲這與它設計用於指定的純文本終端不相關。
如果您在X兼容終端中運行代碼,則可能使用控制代碼,但這很可能不是便攜式的。
另一種可能的方法是有限的支持,檢查ws_xpixel and ws_ypixel values of struct terminfo。
一個Python代碼片段來查詢這些值:
import array, fcntl, termios
buf = array.array('H', [0, 0, 0, 0])
fcntl.ioctl(1, termios.TIOCGWINSZ, buf)
print(buf[2], buf[3])
在某些終端仿真程序這隻作品,別人總是報告0 0
。見例如支持矩陣爲VTE feature request to set these fields。
任何想法爲什麼它不適用於標準輸出重定向? (即,與'read'一起使用時) – skrat
「ioctl」的第一個參數是文件描述符。使用未重定向的號碼,例如如果您從終端讀取但寫入文件,則爲0。 – egmont
請參閱https://asciinema.org/a/52IHAqeSgUDhiCgFgcusXJmjr – skrat