我试图在启动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'