web-dev-qa-db-fra.com

python: impression utilisant le retour chariot et la virgule ne fonctionne pas

J'ai besoin d'imprimer sur une ligne dans une boucle (Python 3.x). En regardant autour de SO déjà, j'ai mis cette ligne dans mon code:

print('{0} imported\r'.format(tot),)

Cependant, il imprime toujours plusieurs lignes en boucle. J'ai aussi essayé

sys.stdout.write('{0} imported\r'.format(tot))

mais cela n'imprime pas n'importe quoi sur la console ...

Quelqu'un sait ce qui se passe avec ça?

20
kevlar1818

Dans le premier cas, certains systèmes traiteront \r en tant que nouvelle ligne. Dans le second cas, vous n'avez pas flush la ligne. Essaye ça:

sys.stdout.write('{0} imported\r'.format(tot))
sys.stdout.flush()

Le rinçage de la ligne n'est pas non plus nécessaire sur tous les systèmes, comme le rappelle Levon - mais c'est généralement une bonne idée lorsque vous utilisez \r par ici.

26
senderle

Si vous souhaitez remplacer votre dernière ligne, vous devez ajouter\r (retour de caractère) et end = "" afin de ne pas passer à la ligne suivante.

values = range(0, 100)
for i in values:
    print ("\rComplete: ", i, "%", end="")
print ("\rComplete: 100%")
18
Joris

Je préfère utiliser la solution de Jan mais de cette façon:

values = range(0, 101)
for i in values:
  print ("Complete: ", i, "%", end="\r")
print ()
6
Southernal