IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

application console sophistiquée


Sujet :

Python

  1. #1
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut application console sophistiquée
    Bonjour

    Je suis en train de faire une application console et je voudrai savoir si
    il est possible d'ajouter des couleurs ainsi que l'auto-complémentation.

    merci d'avance
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  2. #2
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    c'est surtout au niveau de la console elle même qu'il faut gérer ça, à mon avis...

    Si t'es sous linux, il ne devrait pas être très long de localiser les fichiers traitants de la coloration de la sortie de certaines commandes...

  3. #3
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Salut

    Comme dit N.Tox, sous linux c'est pas trop difficile.
    Le tout est que la console ouverte soit un tty (soit la grande majorité des consoles actuelles)

    Les codes couleurs sont de la forme "\x1b[%c;%dm", où %c est un chiffre entre 31 et 39 (environ, à vérifier), correspondant à la couleur, et %d varie entre 0 et 9, et fait des variations comme gras, normal, surligné, souligné, barré etc... Il y avait même un clignottant, mais je ne remets pas la main dessus
    Exemples:
    \x1b[31;1mHello écrira "Hello" en rouge gras.
    Tu peux remplacer \x1b par \033, c'est le même nombre respectivement en hexa et octal.

    Pour ce qui est du positionnement du curseur, c'est presque pareil:
    print("\x1b[1;2HSalut") positionnera "Salut" sur la 2ième colonne de la première ligne.

    Il reste un caractère utile à connaître, clear, et le voici: \x1b[2J

  4. #4
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    J'ai trouvé un lien expliquant comment modifier la console dos.
    http://code.activestate.com/recipes/496901/
    l'exemple utilise ctype. J'ai tous les élément pour la couleur

    Il reste un caractère utile à connaître, clear, et le voici: \x1b[2J
    Sa va mettre utile pour l'auto-complémentation.

    Merci beaucoup
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  5. #5
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Citation Envoyé par vincent.mbg Voir le message
    Sa va mettre utile pour l'auto-complémentation
    Ca fait un clear de tout l'écran hein
    En plus c'est sous linux. Il est très fort probable que ce soit différent sous dos.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    bonsoir,

    tu as également la librairie curses de python dans la librairie standard qui sert à faire des entrées-sorties texte évoluées sur la console.

  7. #7
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 861
    Points
    1 861
    Par défaut
    Une classe que j'ai faite qui gère les couleurs de la console si ca peut t'aider
    http://snippets.dzone.com/posts/show/6944
    Tu a juste a faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnixConsoleStyler.apply_style("red")
    par exemple

  8. #8
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    Ca fait un clear de tout l'écran hein
    En plus c'est sous linux. Il est très fort probable que ce soit différent sous dos.
    J'imagine que je vais avoir besoin d'effacer un caractère pour l'auto-complémentation.
    Si la personne saisi tab. Il faut effacer la tabulation et écrire la suite du mot.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>> print 'sl\t\x08t'
    slt
    afficher le caractère Backspace me semble une solution.

    Une classe que j'ai faite qui gère les couleurs de la console si ca peut t'aider
    merci kedare

    Le problème s'est que sa me fait pas mal de module Je voulait
    faire quelque chose de léger et multi-plateforme
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  9. #9
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 861
    Points
    1 861
    Par défaut
    Je trouve pas ca spécialement lourd
    La gestion de la console est totalement différente sous Windows, donc c'est compliqué de faire quelque chose de compatible

  10. #10
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Pourquoi ne pas faire une 'pseudo-console'. Par exemple un wxFrame avec les wx-widgets, ne contenant qu'un contrôle type 'zone de texte'. On peut faire ça avec boa constructor en deux temps trois mouvements. Le résultat sera indépendant de l'OS.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  11. #11
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Citation Envoyé par kedare Voir le message
    La gestion de la console est totalement différente sous Windows, donc c'est compliqué de faire quelque chose de compatible
    Il suffit de faire deux classes différentes: une pour windows, une pour linux. Et pour les perfectionnistes, l'interface qui va avec :p

    @Zavonen: il est possible que l'application doive pouvoir être exécutée dans un environnement de console. Auquel cas la solution GUI est impossible.
    Très bonne idée autrement

  12. #12
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    Pour l'auto-complémentation j'ai fait ce petit prototype
    faut que je mette en place les "Backspace" pour effacer un caractère
    sur une ligne"


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    import sys
    import msvcrt
     
    ESPACE = "\x20"
    ENTREE = "\x0D"
    TAB = "\x09"
     
    saisie = ''
    mot = ''
     
    #L'application se termine quant on saisi exit sur une ligne.
    while mot != ENTREE + "exit" + ENTREE :
        saisie = msvcrt.getch() #Recupere un seul caractere
        mot += saisie
     
     
        if mot.endswith( ESPACE ) :
            mot = ''
     
        #selon par quoi debute le mot on complete
        if mot.endswith( "SE" + TAB ) :
            sys.stdout.write( "LECT" )
            mot = ''
     
        elif mot.endswith( "FR" + TAB ) :
            sys.stdout.write( "OM" )
            mot = ''
     
        elif mot.endswith( ENTREE ) :
            mot = ENTREE
            print 
     
        else :
            sys.stdout.write( saisie )
    sous Unix je doit remplacer
    msvcrt.getch() par sys.stdin.read(1)

    avec au début du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import sys, tty, termios
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    tty.setraw(sys.stdin.fileno())
    J'espère trouver plus simple
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  13. #13
    Membre habitué
    Inscrit en
    Mars 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2003
    Messages : 127
    Points : 149
    Points
    149
    Par défaut
    Et pourquoi pas utilisé un jolie module python pour l'autocomplétion
    http://docs.python.org/library/readline.html

  14. #14
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    Et pourquoi pas utilisé un jolie module python pour l'autocomplétion
    j'aurai aimé avoir une solution sans importation sélectives. J'ai essayé de faire
    tout avec ctype mais getch n'existe pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    >>> import ctypes
    >>> libc = ctypes.cdll.msvcrt
    >>> getch = libc.getch
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\Python25\lib\ctypes\__init__.py", line 361, in __getattr__
        func = self.__getitem__(name)
      File "C:\Python25\lib\ctypes\__init__.py", line 366, in __getitem__
        func = self._FuncPtr((name_or_ordinal, self))
    AttributeError: function 'getch' not found
    >>>
    j'ai trouvé ici un code pour avoir un getch cross-plateforme
    http://dis.4chan.org/read/prog/1236990226

    après, la suite de mon code sera la même peut importe l'OS, se sera plus simple à maintenir.

    Merci à tous.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/05/2004, 15h37
  2. [Kylix] une application console
    Par naili dans le forum EDI
    Réponses: 3
    Dernier message: 19/04/2004, 14h27
  3. [Delphi] Application "console" et caractères ASCII
    Par Yorys dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 31/07/2003, 09h50
  4. [Kylix] Kylix 3 et Applications console
    Par deniscm dans le forum EDI
    Réponses: 2
    Dernier message: 14/01/2003, 13h37
  5. [Kylix] application console avec kylix 3 ?
    Par Hakim dans le forum EDI
    Réponses: 4
    Dernier message: 15/11/2002, 22h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo