I couldn't find anything with a quick Google search, nor anything on here, saving for this. However, it doesn't do the trick. So how exactly do you resize the terminal using Python?
Asked
Active
Viewed 1.8k times
9
-
Oh, right. I'm using a Linux (Ubuntu 10.10, if it matters). And now to display my ignorance: '*nix'? – Elliot Bonneville Jun 20 '11 at 23:38
-
1hehe no problem http://en.wikipedia.org/wiki/Unix#Branding – Trufa Jun 20 '11 at 23:41
-
What exactly do you mean by resize? Do you mean the pty/tty knowledge of the terminal size, or an actual terminal application (e.g. xterm) size (geometry)? – Keith Jun 21 '11 at 03:12
2 Answers
26
To change the tty/pty setting you have to use an ioctl on the stdin file descriptor.
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)
But to change the actual window size you can use terminal escape sequences, but not all terminals support or enable that feature. If you're using urxvt you can do this:
import sys
sys.stdout.write("\x1b[8;{rows};{cols}t".format(rows=32, cols=100))
But that may not work on all terminals.

Keith
- 42,110
- 11
- 57
- 76
-
I can report that this works on Ubuntu's Terminal, but only if the Terminal app window is not maximized. – Al Sweigart Feb 16 '23 at 21:30
1
If you install xdotool, you can change the size of the terminal window with something like this:
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. On Ubuntu xdotool
is provided by a package of the same name.

unutbu
- 842,883
- 184
- 1,785
- 1,677
-
this seems resize x11 gui window, not resize (virtual) terminal window in pty – yurenchen Oct 27 '22 at 01:26