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

Signaler
Messages postés
41
Date d'inscription
vendredi 22 décembre 2017
Statut
Membre
Dernière intervention
16 avril 2020
-
Messages postés
11779
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 août 2020
-
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

1 réponse

Messages postés
11779
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 août 2020
674
bonjour, cela se passe un peu comme si l'affichage était caché jusqu'à la fin du programme?
Messages postés
41
Date d'inscription
vendredi 22 décembre 2017
Statut
Membre
Dernière intervention
16 avril 2020
1
oui exactement
Messages postés
11779
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 août 2020
674 >
Messages postés
41
Date d'inscription
vendredi 22 décembre 2017
Statut
Membre
Dernière intervention
16 avril 2020

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)
Messages postés
41
Date d'inscription
vendredi 22 décembre 2017
Statut
Membre
Dernière intervention
16 avril 2020
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 !
Messages postés
11779
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 août 2020
674 >
Messages postés
41
Date d'inscription
vendredi 22 décembre 2017
Statut
Membre
Dernière intervention
16 avril 2020

parfait, peux-tu alors marquer comme résolu, via la roue dentée à droite du titre?