1. ホーム
  2. python

[解決済み] Pythonでコンソール出力を置き換える

2022-06-11 12:19:39

質問

私は、あるC/C++プログラムのような気の利いたコンソールカウンターをPythonで作るにはどうしたらいいかと考えています。

私は物事を行うループを持っていて、現在の出力は以下の線に沿っています。

Doing thing 0
Doing thing 1
Doing thing 2
...

最後の行が更新されるだけであれば、よりすっきりするでしょう。

X things done.

私は多くのコンソールプログラムでこれを見たことがあり、Pythonでこれを行うかどうか/どのように行うか疑問に思っています。

どのように解決するのですか?

簡単な方法は "\r" を文字列の前に記述し、改行を追加しないことです。文字列が短くなることがなければ、これで十分です...。

sys.stdout.write("\rDoing thing %i" % i)
sys.stdout.flush()

もう少し洗練されたものとして、プログレスバーがあります...これは私が使っているものです。

def start_progress(title):
    global progress_x
    sys.stdout.write(title + ": [" + "-"*40 + "]" + chr(8)*41)
    sys.stdout.flush()
    progress_x = 0

def progress(x):
    global progress_x
    x = int(x * 40 // 100)
    sys.stdout.write("#" * (x - progress_x))
    sys.stdout.flush()
    progress_x = x

def end_progress():
    sys.stdout.write("#" * (40 - progress_x) + "]\n")
    sys.stdout.flush()

あなたは start_progress に操作の説明を渡し、次に progress(x) ここで x はパーセンテージで、最後に end_progress()