¿Desea cambiar el tamaño de las ventanas de terminal en python, funcionando pero no del todo bien?

Intenté cambiar el tamaño de la ventana del terminal al iniciar una secuencia de comandos de Python para garantizar que la pantalla tenga un tamaño estático. Está funcionando pero no es exactamente lo que esperaba. He intentado algunos métodos:

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

y

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

e incluso solo

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

Todos ellos trabajan y redimensionan el terminal real. Sin embargo, si mi terminal es, digamos 25×80 para comenzar, el script se inicia, cambia de tamaño y luego se cierra. No ejecutará el rest del script. Lo envolví en un bash / Excepto y no se arroja nada. Nada en los syslogs y python -v script.py no muestra nada extraño. Si ejecuto el script de nuevo o en un tamaño de término de 40×120 (mi tamaño de destino) … el script se ejecuta bien. ¿Por qué está ejecutando el escape ANSI saliendo de python? Además, si lo ejecuto de forma interactiva, funciona sin problemas. Utilizando Python 2.6.6.

Intenté ejecutar el siguiente script y “funciona” (Linux Debian / Python 2.6 / gnome-terminal):

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

La ventana se redimensiona y la ejecución del script continúa.


Si confirma en su caso que el progtwig se detiene después de cambiar el tamaño, supongo que Python recibió una señal SIGWINCH cuando se SIGWINCH el tamaño de la ventana.

Debe intentar agregar un manejador de señal específico . Algo como eso:

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

Necesitas poner el terminal en modo cbreak para esto. Usando el término paquete (término easy_install) esto podría verse así:

 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'