シリアルコンソールの上の行の何かを上書きしたいと思います。上に移動できるキャラクターはありますか?
5 に答える
ほとんどの端末はANSIエスケープコードを理解しています。このユースケースに関連するコード:
"\033[F"
–カーソルを前の行の先頭に移動します"\033[A"
–カーソルを1行上に移動します
例(Python):
print("\033[FMy text overwriting the previous line.")
いいえ、それほど簡単ではありません。特に、カーソルの配置をより細かく制御し、プログラムでより多くのことを実行したい場合は、 cursesライブラリのようなものを使用する必要があります。
これは、Cursesを使用したプログラミングに関するPythonドキュメントへのリンクです。この短いチュートリアル/例も興味深いかもしれません。
Windowsを使用している場合は、ドキュメントでこのメモを見つけました。
誰もcursesモジュールのWindowsポートを作成していません。Windowsプラットフォームでは、FredrikLundhによって作成されたコンソールモジュールを試してください。コンソールモジュールは、カーソルアドレス可能なテキスト出力に加えて、マウスとキーボード入力の完全なサポートを提供し、 http://effbot.org/zone/console-index.htmから入手できます。
C ++にはNCursesライブラリがあると思います。リンクされたページには、C++をいじくり回したい場合にカーソルを移動するためのセクションがあります。また、NCursesプログラミングハウツーもあります。
ずっと前に、私はCでcursesライブラリを非常にうまく使用しました。
更新:
ターミナル/シリアルでこれを実行する部分を見逃しました。ANSIエスケープシーケンスは、特にあなたのような単純なタスクの場合に最も簡単であり、このための@SvenMarnachソリューションに同意します。
for i in range(10):
print("Loading" + "." * i)
doSomeTimeConsumingProcessing()
sys.stdout.write("\033[F") # Cursor up one lin
Pythonでこれを試して、doSomeTimeConsumingProcessing()を必要なルーチンに置き換えて、役立つことを願っています
私は間違っているかもしれませんが:
#include <windows.h>
void gotoxy ( int column, int line )
{
COORD coord;
coord.X = column;
coord.Y = line;
SetConsoleCursorPosition(
GetStdHandle( STD_OUTPUT_HANDLE ),
coord
);
}
Windows標準コンソールで。
キャリッジリターンを使用して行の先頭に移動でき、ANSIコードESC A
("\033[A"
)を使用して行を表示できます。これはLinuxで機能します。colorama
パッケージを使用してANSIコードを有効にすることにより、Windowsで動作します。
import time
import sys
import colorama
colorama.init()
print("Line 1")
time.sleep(1)
print("Line 2")
time.sleep(1)
print("Line 3 (no eol)", end="")
sys.stdout.flush()
time.sleep(1)
print("\rLine 3 the sequel")
time.sleep(1)
print("\033[ALine 3 the second sequel")
time.sleep(1)
print("\033[A\033[A\033[ALine 1 the sequel")
time.sleep(1)
print() # skip two lines so that lines 2 and 3 don't get overwritten by the next console prompt
print()
出力:
> python3 multiline.py
Line 1 the sequel
Line 2
Line 3 the second sequel
>
内部的には、coloramaはおそらくを使用してコンソール仮想端末シーケンス
を有効にしSetConsoleMode
ます。