2016-04-17 1 views
4

Je veux faire * flash sur la ligne de commande dans un intervalle de 1 seconde.Faire un clignotant indicateur occupé sur shell python

import time 
from sys import stdout 

while True: 
    stdout.write(' *') 
    time.sleep(.5) 
    stdout.write('\r ') 
    time.sleep(.5) 

Tout ce que je reçois est une ligne vide, aucun clignotement *.

Pourquoi est-ce?

+0

Votre programme fonctionne bien pour moi. Cela doit être un problème avec votre environnement. Utilisez-vous le ralenti? – frankenapps

+1

Pourquoi ne pas utiliser l'impression? –

+0

non, j'utilise KDE terminal "Konsole" –

Répondre

5

Vérifiez cela. Cette imprimera * sur une ligne à intervalles de 0,5 seconde et montrer pendant 0,5 seconde (clignotant comme vous l'avez appelé)

import time 

while True: 
    print('*', flush=True, end='\r') 
    time.sleep(0.5) 
    print(' ', flush=True, end='\r') 
    time.sleep(0.5) 

Notez que cela ne fonctionne pas en IDLE, mais avec cmd il fonctionne très bien.

Sans l'aide de deux déclarations d'impression, vous pouvez le faire de cette façon:

import time 

i = '*' 
while True: 
    print('{}\r'.format(i), end='') 
    i = ' ' if i=='*' else '*' 
    time.sleep(0.5) 
+0

imprime répétitive * sur Windows, fin = '\ r' fonctionne pour moi –

6

Jetez un oeil à la discussion ici: How to overwrite the previous print to stdout in python?
Le code suivant fonctionne dans l'environnement IDLE et la ligne de commande sous Windows 10 :

import time 

while True: 
    print('*', end="\r") 
    time.sleep(.5) 
    print(' ', end="\r") 
    time.sleep(.5)