Hướng dẫn print overwrite python - in ghi đè python

50

Nội dung chính ShowShow

  • Làm thế nào để bạn ghi đè một dòng in trong Python?
  • Làm thế nào để bạn ghi đè một dòng trước trong Python?
  • Làm thế nào để bạn in nhiều dòng trên một dòng trong Python?
  • Làm thế nào để bạn in nhiều dòng trên một vòng lặp trong Python?

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.Learn more.
Learn more.

Tôi biết có thể viết lại dòng cuối cùng được hiển thị trong thiết bị đầu cuối với "\ r", nhưng tôi gặp khó khăn khi tìm ra nếu có cách nào để quay lại và chỉnh sửa các dòng trước được in trong bảng điều khiển.

Điều tôi muốn làm là in lại nhiều dòng cho một game nhập vai dựa trên văn bản, tuy nhiên, một người bạn cũng đang tự hỏi về điều này cho một ứng dụng có một dòng dành riêng cho một thanh tiến trình và một người khác mô tả việc tải xuống.

tức là bảng điều khiển sẽ in:

Moving file: NameOfFile.txt  
Total Progress: [########              ] 40%

và sau đó cập nhật một cách thích hợp [cho cả hai dòng] khi chương trình đang chạy.

mkrieger1

15.8k4 Huy hiệu vàng46 Huy hiệu bạc57 Huy hiệu Đồng4 gold badges46 silver badges57 bronze badges4 gold badges46 silver badges57 bronze badges

hỏi ngày 27 tháng 7 năm 2011 lúc 6:47Jul 27, 2011 at 6:47Jul 27, 2011 at 6:47

3

Trên UNIX, sử dụng mô -đun Curses.

Trên Windows, có một số tùy chọn:

  • Pdcurses: //www.lfd.uci.edu/~gohlke/pythonlibs/
  • Howto được liên kết ở trên giới thiệu mô -đun bảng điều khiển
  • //newcenturycomputers.net/projects/wconio.html
  • //docs.activestate.com/activepython/2.6/pywin32/win32console.html

Ví dụ đơn giản sử dụng những lời nguyền [tôi là tổng số N00B]:

import curses
import time

def report_progress[filename, progress]:
    """progress: 0-10"""
    stdscr.addstr[0, 0, "Moving file: {0}".format[filename]]
    stdscr.addstr[1, 0, "Total progress: [{1:10}] {0}%".format[progress * 10, "#" * progress]]
    stdscr.refresh[]

if __name__ == "__main__":
    stdscr = curses.initscr[]
    curses.noecho[]
    curses.cbreak[]

    try:
        for i in range[10]:
            report_progress["file_{0}.txt".format[i], i+1]
            time.sleep[0.5]
    finally:
        curses.echo[]
        curses.nocbreak[]
        curses.endwin[]

Galigator

7.8532 Huy hiệu vàng23 Huy hiệu bạc35 Huy hiệu Đồng2 gold badges23 silver badges35 bronze badges2 gold badges23 silver badges35 bronze badges

Đã trả lời ngày 27 tháng 7 năm 2011 lúc 6:51Jul 27, 2011 at 6:51Jul 27, 2011 at 6:51

codeapecodeapecodeapecodeape

95,4K24 Huy hiệu vàng151 Huy hiệu bạc180 Huy hiệu đồng24 gold badges151 silver badges180 bronze badges24 gold badges151 silver badges180 bronze badges

3

Như thế này:

#!/usr/bin/env python

import sys
import time
from collections import deque

queue = deque[[], 3]
for t in range[20]:
    time.sleep[0.5]
    s = "update %d" % t
    for _ in range[len[queue]]:
        sys.stdout.write["\x1b[1A\x1b[2K"] # move up cursor and delete whole line
    queue.append[s]
    for i in range[len[queue]]:
        sys.stdout.write[queue[i] + "\n"] # reprint the lines

Tôi phát hiện ra điều này trong dự án Jiri, được viết trong Go.

Thậm chí tốt hơn: Xóa tất cả các dòng sau khi hoàn thành:

#!/usr/bin/env python

import sys
import time
from collections import deque

queue = deque[[], 3]
t = 0
while True:
    time.sleep[0.5]
    if t 

Bài Viết Liên Quan

Chủ Đề