2013-01-13 22 views
8
Dinamik bazı bilgilerini yenilemek istiyor

(sadece ilerleme çubuğu gibi), aşağıdaki koduçok hatlı çıkışını yenilemek için nasıl dinamik

#! /usr/bin/env python 
import sys 
import time 

print "start the output" 
def loop(): 
    i = 0 

    while 1: 
     i += 1 
     output = "\rFirst_line%s..." % str(i) 
     sys.stdout.write(output)   
     sys.stdout.flush() 
     time.sleep(1) 
loop() 

Olabilir sadece çıkış single_line bilgi dinamik, eklenti ile bunu yapabilir '\ n' çıktıya, beklendiği gibi çalışmadı.

output = "\rFirst_line%s...\n" % str(i) 

Çoklu hat içeriğini yenilemenin herhangi bir yolu yardımcı olabilir mi?

cevap

-1

yazma konsola '\ b':

import sys 
import time 

print "start the output" 
def loop(): 
    i = 0 
    output = "\rFirst_line%s..." % str(0) 
    sys.stdout.write(output) 
    while 1: 
     sys.stdout.write('\b'*len(output)) 
     i += 1 
     output = "\rFirst_line%s..." % str(i) 
     sys.stdout.write(output)   
     sys.stdout.flush() 
     time.sleep(1) 
loop() 
+0

Merhaba, imxylz: D İşte

bir örnektir. Hızlı yanıt için teşekkürler, ancak çıktıda bir \ n \ n \ n \ n \ n \ n \ n \ n \ n "", \ "\ rFirst_line% s ... \ n +++"% str (i) gibi hala iyi çalışmadı. – user1675167

+0

Yeni bir hat ile geri (backspace) yazamazsınız, ancak tt makul görünebilir, ancak daha önce teleteklerle geriye dönük olarak uyumlu olmaz. Tüm ekranı temizlemek istiyorsanız, bunu kontrol edin. http://stackoverflow.com/questions/3136202/deleting-already-printed-in-python#3136352 – imxylz

+0

Yeni işlev baskısını deneyin (object1, object2, sep = '\ n', end = ''). sys.stdout.write ('\ b \ b \ b/b \'), '\ b', '\ n' ile dize için hala iyi çalışmadı. Görünüşe göre yolumu değiştirmek zorundayım (os.system ('clear') kullanın. – user1675167

0

hiçbir ("sistem" Ben sadece OS değil demek söyleyerek-bağımsız bir sistem Bunu yapmanın yolu değil, aynı zamanda, terminal uygulaması ve olarak kurulum vardır iyi) imleci yukarı hareket ettirecek standart kaçış dizisi olmadığından. Sisteme bağlı yollarla ilgili olarak, yapılandırmanız için mevcut olabilir, ancak sisteminiz hakkında daha fazla bilgiye ihtiyaç vardır. Her neyse, genellikle bu özellikleri kullanmak iyi bir fikir değildir.

P.S. Programınızın çıktısını bir dosyaya yönlendirmeyeceğinizi umarız. Bir dosyaya yönlendirilirse, bu ilerleme göstergeleri korkunç bir çıktı üretir.

1

curses ile yapabilirdiniz, ancak bunun bir önemi yoktur.

2

Ben de o durum vardı ve nihayet çözmek için bir fikrim var bu; D

reprint- A simple module for Python 2/3 to print and refresh multi line output contents in terminal

Sadece olarak output örneği dict ya list (Kullandığınız modu normal bağımlı bir o davranabilirsiniz). Eğer output durumda bu içeriği değiştirdiğinizde, terminalde çıkış otomatik olarak yenilenir:

from reprint import output 
import time 
import random 

print "start the output" 

with output(initial_len=3, interval=0) as output_lines: 
    while True: 
     output_lines[0] = "First_line {}...".format(random.randint(1,10)) 
     output_lines[1] = "Second_line {}...".format(random.randint(1,10)) 
     output_lines[2] = "Third_line {}...".format(random.randint(1,10)) 
     time.sleep(0.5) 
İlgili konular