5.11.1 Objets shlex

Une instance de shlex possède les méthodes suivantes:

get_token()
Reourne un lexème. Si les lexèmes ont été empilés avec push_token(), enlève un lexème de la pile. Sinon, en lit un depuis le flux d'entrée. Si en lisant on rencontre tout de suite une fin de fichier, une chaîne de caractères vide est retournée.

push_token(str)
Dépose l'argument au sommet de la pile de lexèmes.

read_token()
Lit un lexème brut. Ignore la pile, et n'interprète pas les requêtes de la source. (En général ceci ne constitue pas un point d'entrée utile, et n'est documenté ici que par souci d'être complet.)

sourcehook(nomfichier)
Quand shlex détecte une requête de source (voir source ci-dessous) cette méthode reçoit le lexème suivant en argument, et il doit retourner un tuple consistant en un nom de fichier et un objet de type fichier ouvert.

Normalement, cette méthode élimine les guillemets de l'argument. Si le résultat est un nom de chemin absolu, ou qu'il n'y avait aucune requête de source en cours, ou que la source précédente était un flux (par exemple sys.stdin), le résultat est laissé tel quel. Sinon, si le résultat est un nom de chemin relatif, on ajoute comme répertoire celui du nom du fichier qui précède immédiatement sur la pile d'inclusion de sources (ce comportement est similaire à celui du préprocesseur C quand il traite #include "file.h"). Le résultat de ces manipulations est traité comme un nom de fichier, et retourné comme le premier élément du tuple, et open() est appelée sur ce nom de fichier pour fournir le second élément.

Cette méthode de raccordement est exposée pour permettre l'implémentation de chemins de recherche de répertoire, l'addition d'extensions de fichiers, et d'autres critères d'espace de noms. Il n'y a pas d'accroche `close' correspondante, mais une instance de shlex appelle la méthode close() du flux d'entrée de source quand celui-ci retourne .

error_leader([fichier[, ligne]])
Cette méthode génère un début de message d'erreur au format d'un label d'erreur de compilation C sous Unix ; le format est '"%s", line %d: ', où "%s" est remplacé par le nom du fichier source courant et "%d" par le numéro de ligne d'entrée courant (les arguments optionnels peuvent être utilisés pour surcharger ces éléments).

Cette commodité est fournie pour encourager les utilisateurs de shlex à générer des messages d'erreur dans le format standard et interprétable reconnu par Emacs et d'autres outils Unix.

Les instances des sous-classes de shlex possèdent un certain nombre de variables d'instance publiques qui contrôlent l'analyse lexicale ou qui peuvent être utilisées pour le débogage:

commenters
La chaîne des caractères reconnus comme débuts de commentaires. Tous les caractères compris entre un début de commentaire et une fin de ligne sont ignorés. Inclut seulement "#" par défaut.

wordchars
La chaîne des caractères qui peuvent être assemblés en lexèmes de plusieurs caractères. Par défaut, inclut tous les caractères ASCII alphanumériques et le caractère de soulignement.

whitespace
Les caractères qui sont considérés comme des espaces et ignorés. Les espaces encadrent les lexèmes. Par défaut, inclut le caractère d'espace, la tabulation, la fin de ligne et le retour chariot.

quotes
Les caractères considérés comme des guillemets. Le lexème accumule les caractères jusqu'à ce que le même guillemet soit rencontré de nouveau (ainsi, des types de guillements différents se protègent les uns des autres, comme dans le shell). Par défaut, inclut les guillemets ASCII simples et doubles.

infile
Le nom du fichier d'entrée courant, tel qu'il est défini au moment de l'instanciation de classe ou empilé ultérieurement par des requêtes de source. Il peut être utile de faire appel à cette méthode en construisant des messages d'erreur.

instream
Le flux d'entrée depuis lequel cette instance de shlex est en train de lire des caractères.

source
Cet attribut vaut None par défaut. Si vous lui assignez une valeur chaîne cette chaîne sera reconnue comme une requête d'inclusion au niveau lexical, similaire au mot-clé "source" dans différents shells. C'est-à-dire que le lexème qui suit immédiatement sera considéré comme un nom de fichier, sera ouvert, et que les entrées seront prises depuis cette source jusqu'à , après quoi la méthode close() de ce flux sera appelée et la source d'entrée redeviendra le flux d'entrée d'origine. Les requêtes de source peuvent être empilées sur un nombre quelconque de niveaux.

debug
Si cet attribut est numérique et vaut 1 ou plus, une instance de shlex affichera des messages d'avancement sur son comportement. Si vous devez vous en servir, vous pouvez lire le code source du module pour apprendre les détails.

Notez que tout caractère non déclaré comme caractère de mot, espace ou guillemet sera retourné comme lexème mono-caractère.

Les caractères guillemet et commentaire ne sont pas reconnus à l'intérieur des mots. Ainsi, les mots "aujourd'hui" et "aujourd#hui" seront retournés comme un seul et même lexème par l'interpréteur par défaut.

lineno
Numéro de ligne de la source (le compteur du nombre de fins de lignes recontrées jusqu'à présent, plus un).

token
Le tampon de lexèmes. Il peut être utile de l'examiner quand on intercepte des exceptions.