Komputery, oprogramowanie, internet i okolice
Blog > Komentarze do wpisu

Zabawy z Pythonem - ujarzmianie curses

Gdy poznaje nową bibliotekę, czy jak w przypadku Pythona moduł, pierwszą rzeczą jaką robię to zagłębienie się w dokumentację i przykładowe fragmenty kodu (jeśli oczywiście są dostępne). Następnie by rozwiać wszelkie wątpliwości i sprawdzić czy wszystko dobrze zrozumiałem biorę się za eksperymenty i testy.

Zabawy z Pythonem

Niestety... Zazwyczaj takie testujące fragmenty kodu dość szybko ginęły w trakcie prac nad projektem. Gdy ponownie natrafiałem na dany problem nie miałem jak do nich wrócić. Niepotrzebnie traciłem czas na ponowne szukanie rozwiązań. Postanowiłem to zmienić!

Od dzisiaj mam zamiar zbierać takie przykłady w jedno miejsce. A gdy zbierze się więcej przykładów dotyczących jakiegoś zagadnienia opiszę je na blogu. Może przy okazji inni też skorzystają. Kod przykładów znajduje się w repozytorium SVN projektu kosciak-misc. Najwygodniej będzie po prostu pobrać za pomocą:

svn checkout http://kosciak-misc.googlecode.com/svn/python/examples kosciak-python-examples

Jeśli ktoś nie zna Subversion to warto nadrobić zaległości, na przykład czytając mój poradnik Subversion.

Curses - przykłady

O module curses w Pythonie wspominałem już wcześniej, podając co zrobić by działał w systemie Windows. Dziś kilka przykładów. Wszystkie działają z PDCUrses na Windosie, natomiast wcurses się wysypuje.

display.py

display.py (xterm)

Szybki przegląd możliwości wyświetlania: obramowania (nie pytajcie jaka jest różnica pomiędzy border i box), tło (trzeba uważać, zwłaszcza w przypadku ustawienia znaku z dodatkowymi atrybutami), lini, wstawianie znaków i tekstu, wraz z różnymi atrybutami (w różnych terminalach różnie są wyświetlane).

keys.py

keys.py

Pobiera znak i wyświetla jego numer oraz nazwę zdefiniowaną przez curses. By naciśnięcie Ctrl-C nie przerywało skryptu ustawiony jest tryb raw. Zastosowałem tu mały trick z os.putenv("ESCDELAY", "25") by zmniejszyć czas oczekiwania po naciśnięciu klawisza ESC (domyślnie czeka pełną sekundę).

characters.py

characters.py (gnome-terminal)

Wyświetla wszystkie dostępne znaki. Bezpiecznie jest używać znaki ASCII z zakresu 32 do 126 - wszędzie powinny być wyświetlane w jednakowy sposób. Jeśli ktoś szuka znanego z DOSu tak zwanego extended ascii (zakres 127 - 256 zawierający na przykład znaczki ░▒▓║┴) to tak na prawdę szuka znaków ze strony kodowej CP437. Niestety nie jest ona dostępna w curses (lub przynajmniej nie wiem jak zmienić kodowanie). Część znaków z CP437 jest zdefiniowanych jako stałe ACS_*.

colors.py

colors.py (gnome-terminal)

Wyświetlenie tabeli wszystkich dostępnych połączeń kolorów + atrybuty A_BOLD, A_STANDOUT i A_REVERSE - na różnych terminalach różnie te połączenia są wyświetlane (boldowany jest kolor pierwszoplanowy lub tła). Dodatkowo zauważyłem, że PDCurses inaczej numeruje kolory.

CursesHandler.py

CursesHandler.py

Przykład implementacji logging.Handler wyświetlającego logowane dane w oknie. Jeśli ktoś zna bardziej elegancki sposób pobrania levelu z logging.LogRecord niż przez logging.Formatter to proszę dać znać.

środa, 17 marca 2010, kosciak1

TrackBack
TrackBack w tym blogu jest moderowany. TrackBack URL do wpisu:
Spis Treści
Kanały RSS
Add to Google
Add to Netvibes