此代码返回终端窗口的大小。
def gettermsize():
s = struct.pack("HHHH", 0, 0, 0, 0)
a = struct.unpack('hhhh', fcntl.ioctl(sys.stdout.fileno(), termios.TIOCGWINSZ , s))
return (a[0], a[1])
它究竟在做什么?
答案 0 :(得分:2)
通常,ioctrl
调用将允许操作员查询和/或设置物理或逻辑设备的各种特征 - 哪些值可用以及如何获取这些特定于设备和设备类型。在这种情况下,正在查询终端设备(sys.stdout.fileno()
),窗口大小(termios
)和标准输出控制台(由TIOCGWINSZ
提供的句柄),以及它需要4个16位无符号值的结构才能在(s
)中工作,它返回4个有符号值,前两个值大概用作高度和宽度。你需要打包/解包值的原因是这实际上是直接调用C代码。