2016-01-09 15 views
5

Sto scrivendo una barra di avanzamento come suggerito da How to animate the command line?. Io uso Pycharm ed eseguo questo file in Run Tool Window.Python3: print (somestring, end = ' r', flush = True) non mostra nulla

import time 
def show_Remaining_Time(time_delta): 
    print('Time Remaining: %d' % time_delta, end='\r', flush=True) 

if __name__ == '__main__': 
    count = 0 
    while True: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1) 

Tuttavia, il codice non visualizza nulla se si esegue questo file .py. Che cosa sto facendo di sbagliato?


ho cercato di Jogger suggeriscono ma non è ancora lavorando se uso print funzione.

Tuttavia, il seguente script funziona come previsto.

import time 
import sys 
def show_Remaining_Time(time_delta): 
    sys.stdout.write('\rtime: %d' % time_delta) # Doesn't work if I use 'time: %d\r' 
    sys.stdout.flush() 
if __name__ == '__main__': 
    count = 0 
    while True: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1) 

Ho 2 domande: ora

  1. Perché opere stdout ma print() no.

  2. Perché il How to animate the command line? suggerisce di aggiungere \r alla fine mentre devo scriverlo all'inizio nel mio caso?

+1

Funziona bene per me nell'interprete interattivo. Stai correndo in una strana shell per caso, ad esempio, la shell IDLE? – ShadowRanger

+0

@ShadowRanger Lo sto usando con la finestra degli strumenti di esecuzione di Pycharm. Se non passo 'end = '\ r'' stampa normalmente. Ma voglio continuare ad aggiornare la stessa linea. – spacegoing

+0

Sì, la finestra di esecuzione di PyCharm non è un normale terminale. Non gestisce i ritorni a capo come vorresti. Esegui in un normale prompt dei comandi. – ShadowRanger

risposta

0

Il problema è che il carattere "\ r" alla fine cancella la riga appena stampata, per quanto riguarda?

import time 
def show_Remaining_Time(time_delta): 
    print("\r") 
    print('Time Remaining: %d' % time_delta, flush=True) 

if __name__ == '__main__': 
    count = 0 
    while True: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1) 

In questo modo, si cancella la linea di prima, e poi stampare il display desiderato, mantenendolo a schermo per tutta la durata del sonno.

+2

Sulla maggior parte dei terminali sono a conoscenza di '\ r' non cancella nulla. Sposta il cursore, ma è necessario un ulteriore output per sovrascrivere ciò che è lì. Inoltre, non stai disabilitando la nuova linea automatica per nessuna delle tue stampe, quindi l'effetto netto è di stampare ogni output su una nuova riga; l'esplicito ''\ r''' print' non fa nulla. – ShadowRanger

+0

Altri problemi a parte (come non usare end = ''), questo ha fatto il trucco per me. – arielnmz

+0

Ho dovuto usare 'print ('\ r', end = '')' e 'print ('output', end = '', flush = True)' per rendere questo lavoro come mi aspettavo. Grazie per il buon punto di partenza però! –

0
this method u can print in same command line: 
import time 
def show_Remaining_Time(time_delta): 
    print(' \r%d:Time Remaining' % time_delta, end = '',flush=False) 

if __name__ == '__main__': 
    count = 0 
    while True and count < 10: 
     show_Remaining_Time(count) 
     count += 1 
     time.sleep(1) 
Problemi correlati