10

一部の情報を動的に更新したい (進行状況バーのように)、次のコードで実行できます

#! /usr/bin/env python
import sys
import time

print "start the output"
def loop():
    i = 0

    while 1:
        i += 1
        output = "\rFirst_line%s..." % str(i) 
        sys.stdout.write(output)        
        sys.stdout.flush()
        time.sleep(1)
loop()

single_line 情報を動的に出力することしかできませんでした。出力に '\n' を追加すると、期待どおりに動作しませんでした。

output = "\rFirst_line%s...\n" % str(i)

multi_line コンテンツを更新するのに役立つ方法はありますか?

4

4 に答える 4

6

私もそのような状況にありましたが、最終的にこれを解決するアイデアを思いつきました;D

reprint - ターミナルで複数行の出力コンテンツを印刷および更新するための Python 2/3 用のシンプルなモジュール

outputそのインスタンスを通常のdictまたはlist(使用するモードに応じて)として扱うことができます。インスタンスでそのコンテンツを変更するとoutput、ターミナルの出力が自動的に更新されます:D

次に例を示します。

from reprint import output
import time
import random

print "start the output"

with output(initial_len=3, interval=0) as output_lines:
    while True:
        output_lines[0] = "First_line  {}...".format(random.randint(1,10))
        output_lines[1] = "Second_line {}...".format(random.randint(1,10))
        output_lines[2] = "Third_line  {}...".format(random.randint(1,10))
        time.sleep(0.5)
于 2016-11-10T15:40:39.137 に答える
1

cursesでそれを行うことができますが、それは自明ではありません。

于 2013-01-13T08:24:07.810 に答える
0

カーソルを上に移動する標準のエスケープシーケンスがないため、システムに依存せずにそれを行う方法はありません(「システム」と言う場合、OSだけでなく、端末アプリとそのセットアップも意味します)。システムに依存する方法については、構成用に存在する可能性がありますが、システムに関する詳細情報が必要です。とにかく、通常、そのような機能を使用することはお勧めできません。

PSプログラムの出力をファイルにリダイレクトしないことを願っています。ファイルにリダイレクトされた場合、そのような進行状況インジケーターはひどい出力を生成します。

于 2013-01-13T08:17:58.280 に答える
-1

'\b' をコンソールに書き込みます:

import sys
import time

print "start the output"
def loop():
    i = 0
    output = "\rFirst_line%s..." % str(0) 
    sys.stdout.write(output)
    while 1:
        sys.stdout.write('\b'*len(output))
        i += 1
        output = "\rFirst_line%s..." % str(i) 
        sys.stdout.write(output)        
        sys.stdout.flush()
        time.sleep(1)
loop()
于 2013-01-13T04:55:34.997 に答える