6

I am writing a Python script to print out displayable user interface. The problem is every Linux user would have their own unique terminal size. This will cause the hard-coded user interface to go out of format.

(If there is a lot of example below, the terminal looks Crazy!!!).

Example, in the script. I have print out:

print "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"

Format should goes well in my terminal: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

When the terminal is smaller, the print out format will run out. Format become: ++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++

So I am thinking:

  1. When the user run the script, can I auto change the Linux terminal size to my declare size
  2. Can I get the Width and Length of the user terminal size using Python, so the terminal display can be flexible
  3. I would like to hear any better solution around the world to solve the terminal display problem!

I would strongly prefer recommendation in Python

Ezylryb
  • 677
  • 1
  • 7
  • 20

3 Answers3

8

I'd highly suggest using something like the Python Standard Library's curses module to do this.

Don't reinvent the wheel - using an existing library will both help you avoid corner cases and also save you time. Plus, the curses interface is a familiar one to *nix users, which will make them like you more.

Amber
  • 507,862
  • 82
  • 626
  • 550
1

As Amber suggested, you should use a library like curses.

Still, you could get the width of the terminal using something like this:

import subprocess
int(subprocess.Popen(['tput', 'cols'], stdout=subprocess.PIPE).stdout.read())
Community
  • 1
  • 1
Attila O.
  • 15,659
  • 11
  • 54
  • 84
0

Based on the comments in Amber's solution, there is some desire to see a solution that works on Windows too. A simple cross platform solution is to use asciimatics. For example:

from asciimatics.screen import Screen

def demo(screen):
    screen.print_at('+' * screen.width, 0, 0)
    screen.refresh()
    sleep(10)

Screen.wrapper(demo)

This package also provides a whole load of higher level widgets to make full screen text UIs easier. See the contact list demo for an example.

Full disclosure: yes - I am the author of that package and so might be a little biased. :-)

Community
  • 1
  • 1
Peter Brittain
  • 13,489
  • 3
  • 41
  • 57