想要在python中调整终端窗口的大小,工作但不完全正确



我试图在启动python脚本时调整终端窗口的大小,以确保显示将是静态大小。它起作用了,但和我预期的不太一样。我尝试了一些方法:

import sys
sys.stdout.write("x1b[8;40;120t")

import subprocess
subprocess.call(["echo","-e","x1b[8;40;120t"])

甚至只是

print "x1b[8;40;80t"

它们都可以工作并调整实际终端的大小。但是,如果我的终端是25x80启动,脚本启动,它调整大小,然后退出。它不会执行脚本的其余部分。我把它包装在try/Except中,没有抛出任何东西。在syslog和python -v script.py中没有显示任何异常。如果我再次执行脚本或在40x120(我的目标大小)的term大小…脚本运行得很好。为什么执行ANSI转义退出python?此外,如果我以交互方式运行它,它的工作没有问题。使用Python 2.6.6

我试着运行下面的脚本,它"工作" (Linux Debian/Python 2.6/gnome-terminal):

print "x1b[8;40;80t"
print "ok"

调整窗口大小,脚本继续执行。


如果你在你的例子中确认程序在调整大小后停止,我的猜测将是Python在调整窗口大小时接收到一个信号SIGWINCH

您应该尝试添加特定的信号处理程序。像这样:

def resizeHandler(signum, frame):
    print "resize-window signal caught"
signal.signal(signal.SIGWINCH, resizeHandler)

您需要将终端设置为cbreak模式。使用术语包(easy_install术语),可以像这样:

from term import opentty, cbreakmode
with opentty() as tty:
    if tty is not None:
        with cbreakmode(tty, min=0):
            tty.write('33[8;26;81t');
print 'terminal resized'

最新更新