2

私のCプログラムが次のようなものを出力できるようにするVT100エスケープシーケンスの組み合わせはありますか?

待っている......

ドットが 1 つずつ表示されるような方法で、コンソールに? 基本的に、余分な「。」を挿入できるコマンドが必要です。すでに送信された改行の前。

Linux の簡単なワンライナーを探しています。ポータブルである必要はありません。これにはncursesはやり過ぎです。

4

2 に答える 2

1

これを行う簡単な方法は、エスケープ シーケンスを使用することです。

"\x1b[A"

カーソルを1 行上に移動します。次に、「Waiting...」メッセージを、前回よりも 1 つ多くドットを付けて再印刷します。

于 2011-10-11T23:49:01.257 に答える
1

ESC[K (行末まで消去) を ESC[A (1 行上) に追加し、新しい行のテキストを出力できます。

Python を使用した例:

import random, time
for _ in range(100):
    print('\x1b[A\x1b[Kthis will print each line cleanly: %d' %(random.randint(0, 100000)))
    time.sleep(0.1)

本当に物事をきちんとしたい場合は、ESC7 (カーソルの保存) と ESC8 (カーソルの復元) を使用してください。

次に、行を書き、最後に ESC7 を使用します。print ステートメントの先頭では、ESC8 を使用します。自動改行をオフにしない限り、これはtty の下部では機能しないことに注意してください一番下を除くすべての行で機能します

import random, time

print('this will print each dot cleanly: \x1b7')
for _ in range(10):
    print('\x1b8.\x1b7')
    print('print more foo: %d' %_)
    time.sleep(0.1)

シェル スクリプト (bash) の場合、\n なしで printf "..." を使用するか、echo -n を使用します。

于 2014-08-03T08:48:18.350 に答える