Fonctionnement de sleep() avec print() [Résolu]

Messages postés
39
Date d'inscription
vendredi 22 décembre 2017
Statut
Membre
Dernière intervention
22 septembre 2019
- - Dernière réponse : yg_be
Messages postés
8711
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2019
- 16 juil. 2019 à 16:43
Bonjour,
j'ai un problème assez simple mais qui me frustre beaucoup :
J'écris et j'exécute mon code python sous VSC, et tout marche pour le mieux. Mais quand je passe sur une console python (celle de base par exemple), j'ai un petit problème avec sleep() et print().
Petit exemple de mon problème :
from time import sleep 

for i in "coucou a tous":
    print(i)
    sleep(0.1)

Cela va bien afficher les lettres les unes en dessous des autres avec une latence de 0.1s
Mais quand je rajoute :
from time import sleep 

for i in "coucou a tous":
    print(i,end="")
    sleep(0.1)

Le mot s'affiche bien sur une ligne mais sans le délais a chaque lettre, comme si il attendais la fin pour le faire.

Quel est mon erreur ?
Merci d'avance
Afficher la suite 

1 réponse

Messages postés
8711
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2019
436
0
Merci
bonjour, cela se passe un peu comme si l'affichage était caché jusqu'à la fin du programme?
Leer0r
Messages postés
39
Date d'inscription
vendredi 22 décembre 2017
Statut
Membre
Dernière intervention
22 septembre 2019
1 -
oui exactement
yg_be
Messages postés
8711
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2019
436 > Leer0r
Messages postés
39
Date d'inscription
vendredi 22 décembre 2017
Statut
Membre
Dernière intervention
22 septembre 2019
-
peut-être ainsi?
import sys
import time

string = 'hello world\n'
for char in string:
    sys.stdout.write(char)
    sys.stdout.flush()
    time.sleep(.25)
Leer0r
Messages postés
39
Date d'inscription
vendredi 22 décembre 2017
Statut
Membre
Dernière intervention
22 septembre 2019
1 -
Cela va les afficher en colonnes alors que je les veut en lignes. Mais j'ai trouvé la solution !
Il existe un paramètre de la fonction print() qui s'appelle flush, du coup avec :
from time import sleep 

for i in "coucou a tous":
    print(i,end="",flush = True)
    sleep(0.1)

J'arrive à obtenir mon résultat !
yg_be
Messages postés
8711
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 octobre 2019
436 > Leer0r
Messages postés
39
Date d'inscription
vendredi 22 décembre 2017
Statut
Membre
Dernière intervention
22 septembre 2019
-
parfait, peux-tu alors marquer comme résolu, via la roue dentée à droite du titre?
Commenter la réponse de yg_be