2010-08-15 45 views
18

Tôi có một tập lệnh Python và tôi muốn làm cho nó hiển thị số tăng từ 0 đến 100% trong thiết bị đầu cuối. Tôi biết làm thế nào để in các con số trên thiết bị đầu cuối nhưng làm thế nào tôi có thể "viết lại" chúng để 0 biến thành 1, 1 thành 2, và như vậy cho đến khi 100?Cách viết lại đầu ra trong terminal

Trả lời

23

In trở về vận chuyển (\r) mà không một dòng mới reset con trỏ đến đầu dòng, làm cho in tiếp theo ghi đè lên những gì đã in:

import time 
import sys 
for i in range(100): 
    print i, 
    sys.stdout.flush() 
    time.sleep(1) 
    print "\r", 

này không xóa dòng, vì vậy nếu bạn cố gắng, nói, in số lượng giảm bằng cách sử dụng phương pháp này, bạn sẽ thấy văn bản còn sót lại từ các bản in trước đó. Bạn có thể giải quyết vấn đề này bằng cách đệm đầu ra của bạn bằng dấu cách hoặc sử dụng một số mã kiểm soát trong các câu trả lời khác.

+3

là nền tảng này độc lập? –

+9

@ klez: có thể không dành cho tất cả các thiết bị đầu cuối. Nó hoạt động cho máy chữ. Nền tảng đó có đủ độc lập cho bạn không? :) –

+2

Trên hai nền tảng theo ý của tôi (Linux và Windows), nó hoạt động. –

5

Công thức này here sẽ chứng minh hữu ích. Sử dụng mô-đun mà như tc, đoạn code sau làm những gì bạn muốn:

from tc import TerminalController 
from time import sleep 
import sys 

term = TerminalController() 

for i in range(10): 
    sys.stdout.write("%3d" % i) 
    sys.stdout.flush() 
    sleep(2) 
    sys.stdout.write(term.BOL + term.CLEAR_EOL) 

Các công thức sử dụng terminfo để có được thông tin về các thiết bị đầu cuối và các công trình trong Linux và OS X đối với một số thiết bị đầu cuối. Tuy nhiên, nó không hoạt động trên Windows. (Cảm ơn piquadrat đã thử nghiệm, theo bình luận bên dưới).

Chỉnh sửa: Công thức cũng cung cấp khả năng sử dụng màu và viết lại một phần của dòng. Nó cũng có một thanh tiến trình văn bản đã sẵn sàng.

+3

theo yêu cầu, tôi đã cố gắng mã của bạn trên Windows (Windows 7, Python 2.7). Đầu ra là "0 1 2 3 4 5 6 7 8 9". –

+0

@piquadrat: cảm ơn rất nhiều. –

+0

Điều này hoạt động nhưng nó quá mức cần thiết. – vy32

0

Dựa trên this answer, nhưng không có bộ điều khiển thiết bị đầu cuối:

import time 
import sys 
for i in range(100): 
    sys.stdout.write("Downloading ... %s%%\r" % (i)) 
    sys.stdout.flush() 
    time.sleep(1) 

Thử nghiệm trên thiết bị đầu cuối GNOME (Linux) và Windows console.

Mẹo: Không chạy ví dụ này trong trình chỉnh sửa IDLE.

2

Sử dụng blessings package - xóa màn hình của bạn (/ rõ ràng cls) và nhập:

import sys 
from blessings import Terminal 
from time import sleep # <- boy, does this sound tempting a.t.m. 

term = Terminal() 
for i in range(6): 
    with term.location(term.width - 3, term.height - 3):   
     print('{}'.format(i)) 
    sleep(2) 
    if (i == 3): 
     print('what was I doing, again?') 
print('done') 

Để cài đặt nó từ CheeseShop, chỉ cần ...

pip install blessings 
Các vấn đề liên quan