2016-08-29 7 views
2

私はPython 3.5で複数の行を再印刷する方法を理解したいと思います。Pythonを使用して複数の印刷行をリフレッシュする方法は?

これは、印刷されたステートメントを適所で更新したいスクリプトの例です。の/更新/リフレッシュ上に

Line 1 
Line 2 
Line 3 
Value = 1 

書き込み:

Line 1 
Line 2 
Line 3 
Value = 0 

を各行の値が毎回変化します私がやろうとしています何

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 

は持っています。これは効果的に私に各行のステータス更新を与えています。

私はanother question from 5 years agoを見ましたが、Python 3+のprint関数ではend引数を追加していますが、もっと簡単な解決方法があると思います。

+1

あなたは何をしようとしているのですか?サンプルコンソールの出力を提供してください – TheLazyScripter

+0

更新されました。うまくいけば、今すぐもっと明確になります。 – Greg

+0

をお知らせください。 –

答えて

1

あなたはそれがプリントたびに上書きされを表示されるように、画面にあなたがprint()を呼び出すたびにクリアしたい場合は、例えば、ウィンドウ内のUNIXでclearまたはclsを使用することができます。

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

これは、彼が端末で作業している場合にのみ機能します。 IDLEやその他の通訳を使用している場合はどうなりますか? – TheLazyScripter

+0

この解決法は移植可能ではありません – BPL

+0

はい@BPLあなたの答えはより移植性があります:)注意してくださいos.systemは非難されました –

2

私はあなたがこの種のソリューションを探している正確に理解している場合:

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、崇高なテキスト、Eclipseのようないくつかのソフトウェアでは動作しません。..このタイプのソフトウェアで実行する際の問題は、/ clsがANSIエスケープシーケンスを使用して画面をクリアしていることです。これらのコマンドは、 "\ 033 [[80; j"などの文字列を出力バッファに書き込みます。ネイティブのコマンドプロンプトはこれを画面を消去するコマンドとして解釈できますが、これらの擬似端末はそれをどのように解釈するのかわからないため、未知の文字を印刷するような小さな四角形が印刷されてしまいます。

このタイプのソフトウェアを使用している場合、ハックアラウンドが印刷を実行している可能性があります( '\ n' * 100)。これは最適な解決策ではありませんが、何よりも優れています。

+0

これは動作します彼が端末で作業している場合。 IDLEやその他の通訳を使用している場合はどうなりますか? – TheLazyScripter

+0

素敵なコピー貼り付け! – dsgdfg

+1

@TheLazyScripter私は何年もPythonを使って作業した後、IDLEのことを使ったことはありません。個人的には気にしません。また、OPはその要件を言及していないので、彼はいくつかの実際のツールを使用しています。 – BPL

0

これにはcursesを使用できます。

#!/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() 
関連する問題