- À propos de sys.stdin
- Lire une ligne avec sys.stdin.readline()
- Supprimer le retour à la ligne avec strip()
- Lire et convertir des nombres avec sys.stdin
- Lire plusieurs valeurs sur une même ligne
- Lire plusieurs lignes avec sys.stdin
- Lire toutes les données avec sys.stdin.read()
- Parcourir directement sys.stdin
- Différence entre input() et sys.stdin
- À retenir !
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.
1 2 3 | import sys print(sys.stdin) |
Sortie possible :
1 | <_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'> |
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().
1 2 3 4 5 6 | import sys print("Entrez votre nom :") nom = sys.stdin.readline() print("Bonjour", nom) |
Sortie possible :
1 2 3 | Entrez votre nom : Younes Bonjour Younes |
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.
1 2 3 4 5 6 | import sys print("Entrez votre nom :") nom = sys.stdin.readline().strip() print("Bonjour", nom) |
Sortie possible :
1 2 3 | Entrez votre nom : Younes Bonjour Younes |
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").
1 2 3 4 5 6 | import sys print("Entrez un texte :") texte = sys.stdin.readline().rstrip("\r\n") print("Texte :", texte) |
Sortie possible :
1 2 3 | Entrez un texte : Python est facile Texte : Python est facile |
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é.
1 2 3 4 5 6 | import sys print("Entrez un entier :") nombre = int(sys.stdin.readline()) print("Carré :", nombre ** 2) |
Sortie possible :
1 2 3 | Entrez un entier : 7 Carré : 49 |
Pour lire un nombre réel, nous pouvons utiliser float().
1 2 3 4 5 6 | import sys print("Entrez le prix :") prix = float(sys.stdin.readline()) print("Prix :", prix) |
Sortie possible :
1 2 3 | Entrez le prix : 19.5 Prix : 19.5 |
Une saisie incompatible avec la conversion demandée peut provoquer une exception ValueError. Nous pouvons donc contrôler cette erreur avec try et except.
1 2 3 4 5 6 7 8 9 | import sys print("Entrez un entier :") try: nombre = int(sys.stdin.readline()) print("Nombre :", nombre) except ValueError: print("Erreur : vous devez saisir un entier.") |
Sortie possible :
1 2 3 | Entrez un entier : abc Erreur : vous devez saisir un entier. |
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.
1 2 3 4 5 6 7 | import sys print("Entrez deux nombres :") a, b = sys.stdin.readline().split() print("a =", a) print("b =", b) |
Sortie possible :
1 2 3 4 | Entrez deux nombres : 12 25 a = 12 b = 25 |
Les valeurs obtenues étant des chaînes de caractères, nous pouvons utiliser map() pour les convertir directement en entiers.
1 2 3 4 5 6 | import sys print("Entrez deux entiers :") a, b = map(int, sys.stdin.readline().split()) print("Somme :", a + b) |
Sortie possible :
1 2 3 | Entrez deux entiers : 12 25 Somme : 37 |
La même technique permet de lire un nombre quelconque de valeurs et de les placer dans une liste.
1 2 3 4 5 6 | import sys print("Entrez plusieurs entiers :") nombres = list(map(int, sys.stdin.readline().split())) print(nombres) |
Sortie possible :
1 2 3 | Entrez plusieurs entiers : 5 12 8 20 7 [5, 12, 8, 20, 7] |
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.
1 2 3 4 5 6 7 8 9 | import sys ligne1 = sys.stdin.readline().strip() ligne2 = sys.stdin.readline().strip() ligne3 = sys.stdin.readline().strip() print("Ligne 1 :", ligne1) print("Ligne 2 :", ligne2) print("Ligne 3 :", ligne3) |
Sortie possible :
1 2 3 4 5 6 | Python Java PHP Ligne 1 : Python Ligne 2 : Java Ligne 3 : PHP |
Si nous connaissons le nombre de lignes à lire, une boucle for permet d'éviter la répétition des instructions.
1 2 3 4 5 | import sys for i in range(3): ligne = sys.stdin.readline().strip() print("Ligne", i + 1, ":", ligne) |
Sortie possible :
1 2 3 4 5 6 | Python Ligne 1 : Python Java Ligne 2 : Java PHP Ligne 3 : PHP |
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.
1 2 3 4 5 6 | import sys contenu = sys.stdin.read() print("Contenu reçu :") print(contenu) |
Sortie possible si l'entrée contient trois lignes :
1 2 3 4 | Contenu reçu : Python Java PHP |
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.
1 2 3 4 5 | import sys texte = sys.stdin.read(5) print("Texte lu :", texte) |
Sortie possible :
1 2 | Python Texte lu : Pytho |
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.
1 2 3 4 | import sys for ligne in sys.stdin: print("Reçu :", ligne.strip()) |
Sortie possible :
1 2 3 | Reçu : Python Reçu : Java Reçu : PHP |
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.
1 2 3 4 5 6 | import sys for ligne in sys.stdin: texte = ligne.strip() if texte: print("Texte :", texte) |
Sortie possible :
1 2 3 | Texte : Python Texte : Java Texte : Django |
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.
1 2 3 | nom = input("Votre nom : ") print("Bonjour", nom) |
Sortie possible :
1 2 | Votre nom : Younes Bonjour Younes |
Avec sys.stdin.readline(), nous travaillons plus directement avec le flux d'entrée standard.
1 2 3 4 5 6 | import sys print("Votre nom :") nom = sys.stdin.readline().strip() print("Bonjour", nom) |
Sortie possible :
1 2 3 | Votre nom : Younes Bonjour Younes |
Les principales différences peuvent être résumées dans le tableau suivant.
| Méthode | Utilisation |
|---|---|
| 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.stdin | Traitement 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.
1 2 3 4 5 6 7 8 9 10 11 | import sys print("Entrez votre nom :") nom = sys.stdin.readline().strip() print("Entrez trois entiers :") nombres = list(map(int, sys.stdin.readline().split())) print("Bonjour", nom) print("Nombres :", nombres) print("Somme :", sum(nombres)) |
Sortie possible :
1 2 3 4 5 6 7 | Entrez votre nom : Younes Entrez trois entiers : 10 20 30 Bonjour Younes Nombres : [10, 20, 30] Somme : 60 |
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/


