SORU
14 Temmuz 2010, ÇARŞAMBA


Tek satırda yazdırma dinamik

Yeni satır ifadeleri arasında görmekten olmadan standart çıkış veren birkaç açıklama yapmak istiyorum.

Özellikle, ben varsayalım:

for item in range(1,100):
    print item

Sonuç:

1
2
3
4
.
.
.

Onun yerine şuna ne gibi görünebilir:

1 2 3 4 5 ...

Daha da iyisi, tek yazdırmak mümkünüzerindeson sayı, tek sayı bir anda ekranda?

CEVAP
14 Temmuz 2010, ÇARŞAMBA


Bu arada...... Bu baskı, bu yüzden her zaman yenilemek için nasıl bir yerde sadece numarasını değiştirmek mi.

Genel olarak, bunu yapmanın yolu terminal control codes. Bu, sadece bir tane özel karakter lazım özellikle basit bir durum: 000 D U TAŞIMA Python '\r' (ve diğer birçok dilde) yazılmış DÖNÜN. İşte tam bir örnek kodunuz:

from sys import stdout
from time import sleep
for i in range(1,20):
    stdout.write("\r%d" % i)
    stdout.flush()
    sleep(1)
stdout.write("\n") # move the cursor to the next line

Bu konuda bazı şeyler şaşırtıcı olabilir:

  • \r dize başında, program çalışırken, imleci her zaman sayı sonra olacak o kadar da gidiyor. Bu sadece kozmetik değil: öykünücüsünü eğer tersini yaparsan çok karışık bazı terminal.
  • Eğer son satırı, sonra program sona erdirir sonra bulunur musun eğer, kabuk sayısının üstüne kendi istemi yazdırır.
  • stdout.flush bazı sistemlerde gerekli değildir, ya da herhangi bir çıktı alamazsınız. Diğer sistemleri buna ihtiyaç olmayabilir, ama herhangi bir zarar vermez.

Eğer bu işe yaramazsa bulursanız, şüpheli gereken ilk şey terminal öykünücüsü adamcağız. vttest programı test yardımcı olabilir.

print ifadesi stdout.write replace edebilirsin ama dosya nesneleri doğrudan kullanımı ile print karıştırmak için değil tercih ederim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dave Wallace

    Dave Wallace

    27 Kasım 2007
  • khloe brooks

    khloe brooks

    25 Temmuz 2011
  • RogerBuckChrist

    RogerBuckChr

    9 Temmuz 2011