用Python调整终端大小?

9

我在快速的Google搜索和这里都没有找到任何有用的内容,只能参考此处。 然而,它并不能起到作用。那么,如何使用Python改变终端大小呢?


没错,我正在使用Linux(如果有关系的话,是Ubuntu 10.10)。现在让我表现出我的无知:'*nix'是什么? - Elliot Bonneville
1
没问题,以下是翻译内容:http://en.wikipedia.org/wiki/Unix#Branding - Trufa
你所说的“resize”具体指什么?是指终端大小的pty/tty知识,还是实际终端应用程序(例如xterm)的大小(几何)? - Keith
2个回答

26

要更改tty/pty设置,您必须在标准输入文件描述符上使用ioctl。

import termios
import struct
import fcntl

def set_winsize(fd, row, col, xpix=0, ypix=0):
    winsize = struct.pack("HHHH", row, col, xpix, ypix)
    fcntl.ioctl(fd, termios.TIOCSWINSZ, winsize)

要更改实际窗口大小,您可以使用终端转义序列,但并非所有终端都支持或启用该功能。如果您正在使用urxvt,则可以执行以下操作:

import sys
sys.stdout.write("\x1b[8;{rows};{cols}t".format(rows=32, cols=100))

但这可能不适用于所有终端。


我可以报告,这在Ubuntu的终端上可以工作,但是只有在终端应用程序窗口没有最大化的情况下。 - Al Sweigart

1
如果您安装了xdotool,您可以使用以下命令更改终端窗口的大小:
import subprocess
import shlex

id_cmd='xdotool getactivewindow'
resize_cmd='xdotool windowsize --usehints {id} 100 30'

proc=subprocess.Popen(shlex.split(id_cmd),stdout=subprocess.PIPE)
windowid,err=proc.communicate()
proc=subprocess.Popen(shlex.split(resize_cmd.format(id=windowid)))
proc.communicate()

PS. 在Ubuntu上,xdotool由同名的软件包提供。


这似乎是调整 X11 GUI 窗口大小,而不是调整 pty 中的(虚拟)终端窗口大小。 - yurenchen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接