2016-04-09 26 views
4

Sorunum, python konsolunda önceki yazdırılan satırın üzerine yazabilmek/yazabilmek istiyorum. Önceki konsol satırının üzerine yazma/temizleme

for i in range(10): 
    print("Loading" + "." * i) 
    time.sleep(1) 
    sys.stdout.write("\033[F") # Cursor up one line 
    sys.stdout.write("\033[K") # Clear to the end of line 

I (çıktısını almak: Bu soru ancak çok aynı kodla, birçok kez ( Python - Remove and Replace Printed items örneğin) istendi (bana hiç bir şey yazdırır için cevap olarak doğru işaretli) Python IDLE):

Loading 
[F[KLoading. 
[F[KLoading.. 
[F[KLoading... 
[F[KLoading.... 
[F[KLoading..... 
[F[KLoading...... 
[F[KLoading....... 
[F[KLoading........ 
[F[KLoading......... 
[F[KLoading.......... 
[F[K 

Herhangi bir fikir? Çok fazla googledim, hiçbir şey gerçekten işe yaramıyor. Ya hiçbir şeyi basar ya da sadece üzerine yazmaz.

Bu yardımcı oluyorsa, Windows 8.1 ve Python 3.51 çalıştırıyorum. Kod çukurunu çalıştırmak cmd hiçbir şeyi etkilemez.

Ayrıca, sys.stdout.flush() eklenmesi yardımcı olmaz.

+0

kontrol ettiniz: http://stackoverflow.com/questions/27575929/ansi-escape-sequences-arent-printed-to-stdout-on-windows – Zorgmorduk

+0

Diziler '\ 033 [F gibi terminal tarafından desteklenmelidir (se e termcap (3) '). AFAIK pencereleri her zaman terminal yetenekleri için çok zayıf bir destek aldı –

cevap

1

Programınızı komut satırından, IDLE içinden değil, çalıştırmanız gerekir.

Sonra, bu çalışması gerekir: \r satırın başına gider

import sys 
import time 

for i in range(10): 
    sys.stdout.write("\r" + "Loading" + "." * i) 
    time.sleep(1) 
    sys.stdout.flush() 
print() 

. Bu nedenle, baskısının en az bir öncekinden daha uzun olduğundan emin olmalısınız. Aksi takdirde, önceki baskının kısımlarını göreceksiniz.

1

İmleci hareket ettirmek için ANSI çıkış dizilerini kullanmaya çalışıyorsunuz. Windows varsayılan olarak bunları desteklemiyor. Onları etkinleştirmek için, Python, sonra terminalde pip install colorama ile colorama modülü yükleyebilir: Windows 10 geçtiyseniz, bu yerine birlikte desteğini etkinleştirebilirsiniz

import colorama 
colorama.init() 

:

import ctypes 
kernel32 = ctypes.windll.kernel32 
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7) 

(Kaynak: https://stackoverflow.com/a/36760881/6379747)