Utiliser l'entrée standard avec sys.stdin en Python

1. À propos de sys.stdin

Le module sys fournit trois flux standards importants : sys.stdin pour l'entrée standard, sys.stdout pour la sortie standard et sys.stderr pour les messages d'erreur.

sys.stdin représente l'entrée standard du programme Python. Dans une utilisation interactive classique, elle correspond généralement aux données saisies au clavier dans le terminal. Elle peut également recevoir des données provenant d'une redirection ou d'un autre programme.

Le programme suivant affiche l'objet associé à sys.stdin.

Sortie possible :

La représentation exacte peut varier selon le système et l'environnement d'exécution. sys.stdin se comporte comme un flux texte ouvert en lecture.

2. Lire une ligne avec sys.stdin.readline()

La méthode sys.stdin.readline() permet de lire une ligne depuis l'entrée standard. Lorsque l'entrée provient du clavier, le programme attend généralement que l'utilisateur saisisse du texte puis valide avec la touche Entrée.

Le programme suivant demande le nom de l'utilisateur puis lit la réponse avec sys.stdin.readline().

Sortie possible :

La chaîne retournée par readline() conserve généralement le caractère de fin de ligne lorsque celui-ci a été lu. Cela peut provoquer un retour à la ligne indésirable lors de certains affichages.

3. Supprimer le retour à la ligne avec strip()

La méthode strip() permet de supprimer les espaces et caractères blancs situés au début et à la fin d'une chaîne, notamment le caractère de fin de ligne récupéré par sys.stdin.readline().

Le programme suivant utilise directement strip() après la lecture.

Sortie possible :

Si nous souhaitons supprimer uniquement le caractère de fin de ligne sans supprimer d'autres espaces éventuellement significatifs, nous pouvons utiliser rstrip("\r\n").

Sortie possible :

4. Lire et convertir des nombres avec sys.stdin

Comme avec input(), les données obtenues avec sys.stdin.readline() sont des chaînes de caractères. Pour effectuer des calculs, nous devons convertir les valeurs avec int() ou float().

Le programme suivant lit un entier puis calcule son carré.

Sortie possible :

Pour lire un nombre réel, nous pouvons utiliser float().

Sortie possible :

Une saisie incompatible avec la conversion demandée peut provoquer une exception ValueError. Nous pouvons donc contrôler cette erreur avec try et except.

Sortie possible :

5. Lire plusieurs valeurs sur une même ligne

Nous pouvons combiner sys.stdin.readline() avec split() pour lire plusieurs valeurs saisies sur une même ligne.

Le programme suivant demande deux nombres séparés par un espace.

Sortie possible :

Les valeurs obtenues étant des chaînes de caractères, nous pouvons utiliser map() pour les convertir directement en entiers.

Sortie possible :

La même technique permet de lire un nombre quelconque de valeurs et de les placer dans une liste.

Sortie possible :

6. Lire plusieurs lignes avec sys.stdin

La méthode readline() peut être appelée plusieurs fois afin de lire successivement plusieurs lignes de l'entrée standard.

Le programme suivant lit trois lignes puis les affiche.

Sortie possible :

Si nous connaissons le nombre de lignes à lire, une boucle for permet d'éviter la répétition des instructions.

Sortie possible :

7. Lire toutes les données avec sys.stdin.read()

La méthode sys.stdin.read() lit les données de l'entrée standard jusqu'à la fin du flux. Elle est particulièrement utile lorsque les données proviennent d'un fichier redirigé ou d'un autre programme.

Le programme suivant lit toutes les données disponibles puis les affiche.

Sortie possible si l'entrée contient trois lignes :

Lorsque sys.stdin.read() est utilisé directement avec le clavier, il attend la fin de l'entrée. Dans un terminal, il faut donc signaler la fin de fichier ou EOF selon le système utilisé.

Nous pouvons également demander à read() de lire au maximum un certain nombre de caractères.

Sortie possible :

8. Parcourir directement sys.stdin

sys.stdin est un objet itérable. Nous pouvons donc le parcourir directement avec une boucle for. Chaque itération fournit une nouvelle ligne jusqu'à la fin du flux.

Le programme suivant parcourt toutes les lignes reçues sur l'entrée standard.

Sortie possible :

Cette écriture est particulièrement pratique lorsque le nombre de lignes à traiter n'est pas connu à l'avance.

Nous pouvons par exemple ignorer les lignes vides avant de traiter les autres lignes.

Sortie possible :

9. Différence entre input() et sys.stdin

La fonction input() et sys.stdin permettent toutes les deux de lire des données depuis l'entrée standard, mais leur utilisation est différente.

input() est généralement plus simple pour les programmes interactifs. Elle lit une ligne et retourne son contenu sans le caractère final de fin de ligne.

Le programme suivant utilise input() pour lire le nom de l'utilisateur.

Sortie possible :

Avec sys.stdin.readline(), nous travaillons plus directement avec le flux d'entrée standard.

Sortie possible :

Les principales différences peuvent être résumées dans le tableau suivant.

MéthodeUtilisation
input()Lecture simple d'une ligne dans un programme interactif
sys.stdin.readline()Lecture directe d'une ligne du flux d'entrée
sys.stdin.read()Lecture de toutes les données jusqu'à la fin du flux
for ligne in sys.stdinTraitement des données ligne par ligne jusqu'à la fin du flux

sys.stdin est notamment intéressant pour les scripts qui doivent traiter de grandes quantités de données, des entrées redirigées ou des flux provenant d'autres programmes.

10. À retenir !

sys.stdin représente l'entrée standard d'un programme Python. Elle permet de lire les données fournies au programme depuis le terminal, une redirection ou un autre flux connecté à l'entrée standard.

  • sys.stdin appartient au module sys.
  • sys.stdin.readline() permet de lire une ligne.
  • readline() conserve généralement le caractère de fin de ligne lorsqu'il est présent.
  • strip() permet de supprimer les caractères blancs au début et à la fin de la chaîne.
  • rstrip("\r\n") permet de supprimer spécifiquement les caractères usuels de fin de ligne.
  • split() permet de séparer plusieurs valeurs saisies sur une ligne.
  • map() peut être utilisé pour convertir plusieurs valeurs numériques.
  • sys.stdin.read() permet de lire les données jusqu'à la fin du flux.
  • sys.stdin peut être parcouru directement avec une boucle for.
  • input() reste généralement plus simple pour les saisies interactives classiques, tandis que sys.stdin offre un accès plus direct au flux d'entrée standard.

Le programme suivant rassemble plusieurs opérations courantes : lecture d'une ligne, suppression du retour à la ligne, lecture de plusieurs nombres et calcul de leur somme.

Sortie possible :

 


 


Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


Leave a Reply

Your email address will not be published. Required fields are marked *