Fonctionnement de sleep() avec print()

Résolu
Leer0r Messages postés 49 Statut Membre -  
yg_be Messages postés 24281 Statut Contributeur -
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
A voir également:

1 réponse

yg_be Messages postés 24281 Statut Contributeur Ambassadeur 1 584
 
bonjour, cela se passe un peu comme si l'affichage était caché jusqu'à la fin du programme?
0
Leer0r Messages postés 49 Statut Membre 1
 
oui exactement
0
yg_be Messages postés 24281 Statut Contributeur 1 584 > Leer0r Messages postés 49 Statut Membre
 
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)
0
Leer0r Messages postés 49 Statut Membre 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 !
0
yg_be Messages postés 24281 Statut Contributeur 1 584 > Leer0r Messages postés 49 Statut Membre
 
parfait, peux-tu alors marquer comme résolu, via la roue dentée à droite du titre?
0