mardi 26 juillet 2016

Utiliser Curses avec Python sous Windows

Curse pour créer une interface console
J'ai déjà touché un peu à Curse avec python sous Linux.
Je trouvais cette bibliothèque d'interface rudimentaire mais suffisante pour réaliser des applications en mode console (ce que nous avons déjà avec de vielle applications clipper qu'il faudra un jour ré-écrire).
Le Hic c'est qu'il n'existait pas de portage Python's curses sous Windows... jusqu'à assez récemment.

Donc, curses sous Python était uniquement cantonné au machine Linux... mais maintenant accessible sous Windows

Des binaires non-officiel pour Python sous Windows
En grattant une nouvelle fois sur le Net, j'ai trouvé
Où il propose justement des packages curses pour Windows.

Curses, an extension based on the PDCurses library.
Unicode characters are not supported.
Comme j'utilise Python 3.4 sous Windows 7, j'ai opté pour le téléchargement du fichier "curses-2.2-cp34-none-win32.whl" (cp34 signifie CPython 3.4... donc le compilateur officiel de la fondation).

whl est un fichier wheel (pythonwheels.com) est le nouveau standard de distribution des bibliothèque python qui remplacera à terme les fichiers .egg

Vous pouvez installer un fichier whl avec votre utilitaire pip.
Dans mon cas, j'ai utilisé la signe de commande suivante sous Windows:
c:\Users\Stock\Downloads>pip3 install curses-2.2-cp34-none-win32.whl
Processing c:\users\stock\downloads\curses-2.2-cp34-none-win32.whl
Installing collected packages: curses
Successfully installed curses-2.2

Et j'ai pu utiliser du code curses suivant sous Windows

from curses import wrapper

def main(stdscr):
    # Clear screen
    stdscr.clear()

    for i in range(0, 10):
        v = i-10
        stdscr.addstr(i, 0, '10 divided by {} is {}'.format(v, 10/v))

    stdscr.refresh()
    stdscr.getkey()

wrapper(main)


Une chouette avancée pour le portage des applications d'une plateforme à l'autre... à voir si cela tient vraiment ses promesses.

Basé sur PDCurses
Le bibliothèque curse installée (celle mentionnée ci-avant) est basé sur PDCurses.
http://www.projectpluto.com/win32a.htm


Support des accentués sous Windows
Je me suis littéralement cassé les dents dès l'impression du premier texte contenant des accentués.
Voyez ce billet sur IndexError (http://indexerror.net/4170/python-3-4-curses-sous-windows-7-erreur-dencodage).
L'utilisation de différents code pages dans le système d'exploitation (voir le billet) ne simplifie rien... et même en passant ma console en cp1252 (comme supporté par curse puisque la doc mentionne qu'il utilise du local.preferredencoding() - soit cp1252 -  pour l'encodage des chaine unicode)... curse détruit toujours l'affichage de mes accentués.



Au détour de différentes lectures (a confirmer), j'ai appris que cette bibliothèque curses utilise PDCurses s'appuie elle-même sur la SDL. La SDL qui, elle, n'intègre le support Unicode que depuis peu. C'est peut être normal que cela cafouille un peu.... et c'est franchement regrettable.

Aucun commentaire: