2012-12-10 22 views
5

\b denetim karakteri, anladığım kadarıyla, önceki karakteri silmek gerekiyordu, bu nedenle bir şey (bu \b + a del karakteri de olurdu) Üzerine yazmayan bir alan gibi ileriye doğru hareket etmek için? b karakterinin tersi olmayan silme alanı yani bir tür nedir?</p> <pre><code>>>> print 'pototobbba' potato </code></pre> <p>bir karakter var mı: Bu biçimde

>>> print 'pototo\r\x\x\xa' 
potato 

Açıkçası daktiloda normal uzay bu sadece iyi yapacağını: Beklenen kullanım gibi bir şey (Ben bu karakteri \x aradım) olacaktır. Ancak bir terminalde bir alan altındaki harfi siler.

Benim kullanım durumu ben geriye dönük geri dönüp renklerle bir karakter akışının çıkış bazı bölümlerini süslemek istediğiniz senaryonun bir pexpect eşleştirme türüdür ve ben bütün akımın bir önbellek tutmak olup olmadığını merak ediyorum Hafızadaki hat gerekli olacak ya da olmayacaktır.

+1

[python'un kaçış sırası tokenleri] içinde ileriye doğru hareket etmenin herhangi bir yolu yoktur (http://docs.python.org/2/reference/lexical_analysis.html#grammar-token-escapeseq) ... –

+0

Ben ayrıntılı bir arama hiçbir saptanmadı en azından böyle bir karakter vardır inanmıyorum. Ancak, linux altında, imleç konumunu [curses modülü] (http://docs.python.org/2/library/curses.html) kullanarak açıkça ayarlayabilmeniz gerekir. – primo

cevap

2

böyle, senin terminali (*), sen İmleç İleri (CUF) dizisini kullanabilirsiniz içinde ANSI escape code sequences üzerine "CSI n C" güvenebilirsiniz ise:

print "Pototo\b\b\ba\x1b[2Ces" 

ve almak:

Potatoes 

CSI \x1b[ ve ANSI çıkış kod sekansları başlatmak için kullanılır. 2 karakter sayısı sağa doğru hareket etmek ve C sağa hareket komuttur.


(*) iyi bir yaklaşımı Windows'u desteklemek gerekir sürece ANSI kodları güvenebilirsiniz olmasıdır.

+0

başka bir kullanım durumu: 'print 'Merhaba Tim \ b \ b \ bw \ x1b [2C, harika bir soru' ':) –

+0

Güzel. baskı "pototo \ r \ x1b [3Ca" 'çalışıyor gibi görünüyor! – wim

0

Sen karakterleri tekrar yazmalısınız: Eğer istemiyorsanız siz el imleç konumu ayarlamak için curses gibi bir kütüphane kullanmak gerektiğini daha

>>> print 'pototo\rpota' 
potato 

, onları yeniden yazmak.

+0

bu sorun o zaman (üzerine yazmadan) kelimenin sonuna şey eklemek edemez edilir. Benim noktada @hayden –

+0

komut satırı bu karmaşık durumları izin yazılmamış olmasıdır. Tek bir satırı (cevaplarımda olduğu gibi) tamamen yeniden yazabilir, ancak başka bir şey yapmaya çalışarak taşınabilir kodunuz olmaz. Böyle şeyler yapmak isterseniz, “küfür” veya terminal manipülasyonu için başka bir kütüphane kullanmanızı tavsiye ederim. – Bakuriu

+0

Maalesef cevabınızın ikinci bölümünü düzgün okumadım. –