1

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

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

它实际上在做什么?

4

1 回答 1

2

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

于 2013-07-14T08:37:36.460 回答