我已经看到一些关于如何获得列数和行数的终端大小的帖子和答案。我可以获得终端大小,或等效地,终端中使用的字体大小,以像素为单位吗?
(我写等效因为终端宽度[px] =字体宽度[px] *列数。或者我的意思是终端宽度。)< / p>
我正在寻找一种适用于Linux上的python 2的方法,但我很欣赏仅适用于python 3的答案。谢谢!
答案 0 :(得分:3)
也许。如果您的终端软件支持XTerm Control Sequences,那么序列\e[14t
将为您提供尺寸宽度*高度(以像素为单位)。
相关:
答案 1 :(得分:1)
因此,您已经知道如何以字符形式获取终端大小(here)。
我担心这是不可能的。 TTY是一个文本终端,无法控制它的运行位置。 因此,如果您的控制台程序在终端中执行,您就无法知道它在哪里显示。
但是,您可以使用图形模式来控制字体,显示等。 但为什么终端?您可以使用GUI。
答案 2 :(得分:1)
在linux中存储终端信息的数据结构是terminfo。这是任何一般终端查询将从中读取的结构。它不包含像素信息,因为它与设计用于指定的纯文本终端无关。
如果您在X兼容终端中运行代码,则可能使用控制代码,但这很可能无法移植。
答案 3 :(得分:1)
支持有限的另一种可行方法是检查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。