Linux Terminal Display and Python
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 开发者_Python百科print out format will run out. Format become: ++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++
So I am thinking:
- When the user run the script, can I auto change the Linux terminal size to my declare size
- Can I get the Width and Length of the user terminal size using Python, so the terminal display can be flexible
- I would like to hear any better solution around the world to solve the terminal display problem!
I would strongly prefer recommendation in Python
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.
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())
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. :-)
精彩评论