2017-07-30 1 views
0

Comment ajouter des lignes à la sortie stdout? En d'autres termes, lorsque j'écris sur stdout, je veux que la sortie qui a déjà été imprimée soit «poussée» vers le bas, puis ajouter la sortie suivante.Ajoute une ligne à la sortie stdout en Python pour tenter d'afficher une animation en chute libre

+0

Seriez-vous en mesure de nous montrer votre code ou de décrire plus en détail ce qui est votre cas d'utilisation pour cela. – jsalonen

+0

Il ressemblera à un livre écrit avec les lignes dans l'ordre inverse. Ce n'est pas très convivial. – Gribouillis

+0

Je veux réellement simuler des gouttes tombant dans la console. Mais, le «pourquoi» n'est pas important :) le «comment» est ce que je demande? – minychillo

Répondre

1

Vous ne pouvez pas faire cela simplement en gérant directement stdout. Stdout est un objet fichier. Dans les fichiers ordinaires, les objets seek peuvent être utilisés. Cependant, comme tout est affiché dans le terminal aussi vite qu'ils sont écrits, la recherche d'appel n'affecte pas ce qui a déjà été affiché. Toutefois, avec une bibliothèque de terminaux appropriée telle que curses, vous pouvez afficher des caractères de contrôle qui manipulent la position du curseur et vous permettre de modifier le contenu du texte n'importe où dans la console.

Notez que curses est une bibliothèque assez bas niveau. Pour votre cas spécifique d'animation, il peut être judicieux d'utiliser une bibliothèque de plus haut niveau telle que asciimatics.

+1

Il existe également d'autres bibliothèques, mentionnées dans [ce fil] (https://stackoverflow.com/questions/8349085/python-ncurses-cdk-urwid-difference). – Gribouillis

0
  • Stocker la valeur initiale à la liste,

  • alors jusqu'à ce que votre condition est satisfaite,

    • ajouter le nouveau contenu à la liste
  • rejoindre les données avec ' \ '

C'est,

import sys 
arr = ['start line',] 
while some_condition_till_you_want_to_write: 
    arr.append('some new content') 
print "\n".join(arr) 
sys.stdout.flush() 
+0

Merci, mais je dois le faire continuellement – minychillo

+0

pour ce faire en continu, mettre True pour tout bloquer et utiliser la file d'attente à l'intérieur. Si la file d'attente n'est pas vide, extraire les éléments de la file d'attente et les imprimer, sinon ne pas imprimer. Et écrire une fonction, qui mettra les éléments dans la file d'attente. –