2017-10-20 33 views
1

Cela a déjà été demandé (par exemple a, b, etc.), mais je ne peux pas le faire fonctionner dans la console IPython. Je veux simplement imprimer du texte encore et encore sur la même ligne, pas comme du texte continu, mais en remplaçant le précédent. Voici mon code:Imprimer au même endroit dans la console IPython

import time 

try: 
    while True: 
     s = "I want this always on the same line. "   
     print(s, end="\r", flush=True)   
     time.sleep(0.5) 

except KeyboardInterrupt: 
    pass 

Et voici ce que je reçois dans la console IPython:

Text does not print on the same line

J'utilise la distribution Anaconda sur PC et Spyder, avec Python 3. Le code fonctionne Anaconda terminal, mais j'ai besoin d'imprimer une image ainsi j'ai besoin d'IPython. J'ai également essayé d'utiliser end="" ou d'ajouter une virgule après l'instruction print() (même si c'est pour Python 2), mais en vain.

+1

'print (" bonjour ", fin =" \ r ")' fonctionne correctement sur ma console (Terminal). – ZdaR

+0

Je reçois "hellohellohellohellohellohellohellohellohellohellohellohellohello" ... – Zep

+0

essayez de l'exécuter dans le terminal, 'python3 run.py' @Zep – ZdaR

Répondre

1

j'ai écrit ceci avant le montage avec la console IPython, donc je ne suis pas sûr que ce soit une solution qui fonctionne là ou non, mais ici son:

Au lieu d'utiliser la commande d'impression(), je Au lieu de cela, essayez d'utiliser sys.stdout.

C'est un « Rapportd'activité » que j'ai dans un de mes scripts:

from sys import stdout 
from time import sleep 

jobLen = 100 
progressReport = 0 

while progressReport < jobLen: 
    progressReport += 1 
    stdout.write("\r[%s/%s]" % (progressReport, jobLen)) 
    stdout.flush() 
    sleep(0.1) 

stdout.write("\n") 
stdout.flush() 

La fonction de sommeil est juste pour que vous puissiez voir le progresReport obtenir plus. La partie "\ r" de la stdout est ce qui fait que le script "remplace" la chaîne previus. Le flush() est ajouté après la fonction write(), car il est parfois nécessaire d'afficher la sortie sur certains environnements. Une fois que vous ne voulez plus écrire sur cette ligne, vous pouvez la terminer en écrivant une chaîne vide sans "\ r" ou en écrivant un "\ n".

+0

Ca marche! Je veux dire ... ça ne marche pas avec le code que je suis en train de travailler, mais ça marche bien sur mon exemple. Je vais essayer de comprendre le reste. – Zep