簡體   English   中英

如何使用Python刷新多條印刷線路?

[英]How to refresh multiple printed lines inplace using Python?

我想了解如何在Python 3.5中重新打印多行。

這是一個腳本示例,我想在此刷新打印的語句。

import random
import time

a = 0
while True:
    statement = """
    Line {}
    Line {}
    Line {}
    Value = {}
    """.format(random.random(), random.random(), random.random(), a)
    print(statement, end='\r')
    time.sleep(1)
    a += 1

我想做的是:

Line 1
Line 2
Line 3
Value = 1

寫在/更新/刷新之上:

Line 1
Line 2
Line 3
Value = 0

每行的值將每次更改。 這實際上為我提供了每條生產線的狀態更新。

我看到了5年前的另一個問題,但是在Python 3+打印函數中添加了end參數,我希望有一個更簡單的解決方案。

如果我已正確理解,您正在尋找這種類型的解決方案:

import random
import time
import os


def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')

a = 0
while True:
    clear_screen()

    statement = """
    Line {}
    Line {}
    Line {}
    Value = {}
    """.format(random.random(), random.random(), random.random(), a)
    print(statement, end='\r')
    time.sleep(1)
    a += 1

該解決方案不適用於IDLE,Sublime Text,Eclipse等某些軟件。在此類軟件中運行該問題的原因是clear / cls使用ANSI轉義序列來清除屏幕。 這些命令將諸如“ \\ 033 [[80; j”]之類的字符串寫入輸出緩沖區。 本機命令提示符能夠將其解釋為清除屏幕的命令,但是這些偽終端不知道如何解釋它,因此它們最終只會打印小方塊,就像打印未知字符一樣。

如果您使用的是這種類型的軟件,則可能會進行打印('\\ n'* 100),這不是最佳解決方案,但總比沒有好。

如果你想清除每次調用時,屏幕print()所以它出現在每次打印被覆蓋,你可以使用clear的UNIX或cls的窗口,例如:

import subprocess
a = 0
while True:
    print(a)
    a += 1
    subprocess.call("clear")

您可以為此使用詛咒

#!/usr/bin/python3

import curses
from time import sleep
from random import random

statement = """
Line {}
Line {}
Line {}
Value = {}"""

screen = curses.initscr()
n = 0

while n < 20:
    screen.clear()
    screen.addstr(0, 0, statement.format(random(), random(), random(), n))
    screen.refresh()
    n += 1
    sleep(0.5)

curses.endwin()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM