prompt() ne crashe pas salement mais propose de retenter son coup

Parce que recommencer tout son câblage parce qu'on a foiré la redirection
mail, c'est ultra-chiant.
This commit is contained in:
Vincent Le Gallic 2014-05-16 01:37:46 +02:00
parent 56dc6e668c
commit 3137d3a315

View file

@ -7,7 +7,14 @@ Copyright (C) Frédéric Pauget
Licence : GPLv2 Licence : GPLv2
""" """
import sys, re, os, tempfile, subprocess import sys
import re
import os
import tempfile
import subprocess
if not "/usr/scripts" in sys.path:
sys.path.append("/usr/scripts")
import cranslib.cransstrings
# Détermination de l'encodage # Détermination de l'encodage
encoding = None encoding = None
@ -290,21 +297,32 @@ def get_screen_size():
except: except:
return (24, 80) return (24, 80)
def prompt(prompt, defaut='', couleur='gras'): def prompt(prompt, defaut=u'', couleur='gras'):
u""" """
Pose la question prompt en couleur (défaut gras), retourne la réponse. Pose la question prompt en couleur (défaut gras), retourne la réponse.
""" """
sys.stdout.write(coul(prompt, couleur).encode(encoding)) prompt = cranslib.cransstrings.decode_dammit(prompt)
defaut = cranslib.cransstrings.decode_dammit(defaut)
# coul renvoie alors un unicode
prompt_s = coul(prompt, couleur)
if defaut : if defaut :
sys.stdout.write((" [%s]" % defaut).encode(encoding)) prompt_s += u" [%s]" % defaut
sys.stdout.write(" ".encode(encoding)) # On fait tout pour ne pas faire crasher le script appelant
v = sys.stdin.readline() # si on lève une erreur, on la rattrappe et on laisse une chance
# de refaire une proposition.
# On laisse néanmoins la possibilité de sortir sur un Ctrl+C
while True:
try: try:
v = v.decode(encoding).strip() v = raw_input(prompt_s.encode(encoding))
except UnicodeDecodeError as error: v = cranslib.cransstrings.decode_dammit(v)
raise UnicodeDecodeError("%s: %r" % (error, v)) if not v:
if not v: v = defaut v = defaut
return v return v
except UnicodeDecodeError as error:
try:
print "UnicodeDecodeError rattrappée (chaîne : %s)" % v
except UnicodeDecodeError as error2:
print "UnicodeDecodeError catched but could not be displayed. Trying ASCII."
class anim : class anim :
""" Permet de créer une animation : """ Permet de créer une animation :