Python3 sleep() problème
J'ai écrit un programme simple sur Python 3.1 et je suis tombé sur ceci:
Si je l'exécute sur le RALENTI, il fonctionne comme prévu - imprime "Initializing."
puis ajoute deux points, l'un après chaque seconde, et attend d'entrée.
from time import sleep
def initialize():
print('Initializing.', end='')
sleep(1)
print(" .", end='')
sleep(1)
print(" .", end='')
input()
initialize()
Le problème est que lorsque je double-cliquez sur le .py pour exécuter le fichier, il fonctionne sur python.exe au lieu de pythonw.exe et des choses étranges se produisent: il rejoint l'ensemble de la sleep()
fois, c'est à dire me fait attendre pendant 2 secondes, puis imprime la totalité de la chaîne Initializing. . .
à la fois. Pourquoi est-ce arrivé? Est-il un moyen pour éviter ce qui se passe dans le terminal? Il fonctionne très bien si j'utilise le RALENTI à la fois sur windows et linux.
\n
encore. En général, l'utilisation de end
indique que vous allez sur et écrit quelque chose immédiatement.OriginalL'auteur roddds | 2010-12-16
Vous devez vous connecter pour publier un commentaire.
C'est parce que la production est en cours de mise en mémoire tampon.
Vous devez ajouter un
sys.stdout.flush()
après chaque écritureEt, après 4 ans, je viens de remarquer que je n'ai jamais vraiment définir ce que accepté de répondre.
À l'aide de Python 3
print
fonction, vous pouvez également utiliser leflush
paramètre, par exempleprint(" .", end='', flush=True)
OriginalL'auteur John La Rooy
Il semble que la différence est que stdout est automatiquement déplacé dans le vide. Pour plus d'efficacité, les langages de programmation souvent d'économiser un tas d'imprimer des appels avant d'écrire à l'écran, ce qui est un processus lent.
Voici une autre question qui a la réponse dont vous avez besoin:
Comment éliminer la sortie de l'imprimé Python?
OriginalL'auteur leoger