获取终端窗口大小的Python代码中发生了什么?

时间:2013-07-14 08:10:20

标签: python

此代码返回终端窗口的大小。

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])

它究竟在做什么?

1 个答案:

答案 0 :(得分:2)

通常,ioctrl调用将允许操作员查询和/或设置物理或逻辑设备的各种特征 - 哪些值可用以及如何获取这些特定于设备和设备类型。在这种情况下,正在查询终端设备(sys.stdout.fileno()),窗口大小(termios)和标准输出控制台(由TIOCGWINSZ提供的句柄),以及它需要4个16位无符号值的结构才能在(s)中工作,它返回4个有符号值,前两个值大概用作高度和宽度。你需要打包/解包值的原因是这实际上是直接调用C代码。