3

我试图在启动 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 中,没有抛出任何东西。syslogs 和 python -v script.py 中没有任何异常显示。如果我再次执行脚本或以 40x120 的术语大小(我的目标大小)..脚本运行得很好。为什么执行 ANSI 转义退出 python?此外,如果我以交互方式运行它,它可以正常工作。使用 Python 2.6.6。

4

2 回答 2

2

我尝试运行以下脚本,它“工作”(Linux Debian / Python 2.6 / gnome-terminal):

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

print "ok"

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


如果您在您的情况下确认程序在调整大小后停止,我的猜测是 PythonSIGWINCH在调整窗口大小时收到了一个信号。

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

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

signal.signal(signal.SIGWINCH, resizeHandler)
于 2013-06-05T14:21:47.170 回答
0

为此,您需要将终端置于 cbreak 模式。使用术语包(easy_install 术语)可能如下所示:

from term import opentty, cbreakmode

with opentty() as tty:
    if tty is not None:
        with cbreakmode(tty, min=0):
            tty.write('\033[8;26;81t');

print 'terminal resized'
于 2013-06-05T14:28:01.420 回答