2012-12-10 34 views
5

Nhân vật \b kiểm soát, như tôi hiểu nó, không phải là nghĩa để xóa ký tự trước (điều này sẽ \b + a del nhân vật cũng), vì vậy cái gì đó như công trình này:Điều gì trái ngược với b ký tự, nghĩa là một loại không gian xóa?

>>> print 'pototo\b\b\ba' 
potato 

Có một nhân vật để di chuyển về phía trước, chẳng hạn như không gian ghi đè? sử dụng dự kiến ​​sẽ là một cái gì đó tương tự (Tôi đã gọi nhân vật này \x):

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

Rõ ràng trên một máy đánh chữ một không gian bình thường sẽ làm điều này tốt. Nhưng trên một thiết bị đầu cuối một không gian xóa lá thư bên dưới.

Trường hợp sử dụng của tôi là loại kịch bản phù hợp với mong muốn mà tôi muốn truy tìm quay lại và trang trí một số phần nhất định của đầu ra của dòng ký tự với màu sắc và tôi tự hỏi liệu có lưu bộ nhớ cache dòng trong bộ nhớ sẽ là cần thiết hay không.

+1

Dường như không có bất kỳ cách nào để chuyển tiếp trong [mã thông báo escape escape của python "] (http://docs.python.org/2/reference/lexical_analysis.html#grammar-token-escapeseq) ... –

+0

Tôi không tin rằng có một nhân vật như vậy, ít nhất một tìm kiếm toàn diện không tiết lộ bất kỳ. Tuy nhiên, dưới Linux bạn có thể đặt rõ ràng vị trí con trỏ bằng cách sử dụng [mô-đun curses] (http://docs.python.org/2/library/curses.html). – primo

Trả lời

2

Nếu bạn có thể dựa vào ANSI escape code sequences trong terminal của bạn (*), bạn có thể sử dụng chuỗi Cursor Forward (CUF) "CSI n C", như thế này:

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

và nhận được:

Potatoes 

CSI là \x1b[ và được sử dụng để bắt đầu trình tự mã ANSI thoát. 2 là số ký tự để di chuyển sang phải và C là lệnh để di chuyển sang phải.


(*) Một xấp xỉ tốt là bạn có thể dựa vào mã ANSI trừ khi bạn cần hỗ trợ Windows.

+0

trường hợp sử dụng khác: 'in 'Xin chào Tim \ b \ b \ bw \ x1b [2C, câu hỏi tuyệt vời'' :) –

+0

Tốt. 'in 'pototo \ r \ x1b [3Ca" 'dường như hoạt động! – wim

0

Bạn nên viết lại các nhân vật:

>>> print 'pototo\rpota' 
potato 

Nếu bạn không muốn viết lại chúng, hơn bạn nên sử dụng một thư viện như curses để tự đặt vị trí con trỏ.

+0

Vấn đề với điều này là sau đó bạn không thể nối thêm bất cứ điều gì vào cuối của từ (mà không ghi đè). –

+0

@hayden Quan điểm của tôi là dòng lệnh không được viết để cho phép những tình huống phức tạp này. Bạn hoàn toàn có thể viết lại một dòng (như câu trả lời của tôi chỉ ra) nhưng cố gắng làm bất cứ điều gì khác bạn sẽ không có mã di động. Tôi khuyên bạn nên sử dụng 'curses' hoặc một thư viện khác cho thao tác đầu cuối nếu bạn muốn làm những việc như vậy. – Bakuriu

+0

Xin lỗi tôi đã không đọc đúng phần thứ hai của câu trả lời của bạn. –

Các vấn đề liên quan