87

シリアルコンソールの上の行の何かを上書きしたいと思います。上に移動できるキャラクターはありますか?

4

5 に答える 5

125

ほとんどの端末はANSIエスケープコードを理解しています。このユースケースに関連するコード:

  • "\033[F"–カーソルを前の行の先頭に移動します
  • "\033[A"–カーソルを1行上に移動します

例(Python):

print("\033[FMy text overwriting the previous line.")
于 2012-07-13T16:26:50.013 に答える
10

いいえ、それほど簡単ではありません。特に、カーソルの配置をより細かく制御し、プログラムでより多くのことを実行したい場合は、 cursesライブラリのようなものを使用する必要があります。

これは、Cursesを使用したプログラミングに関するPythonドキュメントへのリンクです。この短いチュートリアル/例も興味深いかもしれません。

Windowsを使用している場合は、ドキュメントでこのメモを見つけました。

誰もcursesモジュールのWindowsポートを作成していません。Windowsプラットフォームでは、FredrikLundhによって作成されたコンソールモジュールを試してください。コンソールモジュールは、カーソルアドレス可能なテキスト出力に加えて、マウスとキーボード入力の完全なサポートを提供し、 http://effbot.org/zone/console-index.htmから入手できます。

C ++にはNCursesライブラリがあると思います。リンクされたページには、C++をいじくり回したい場合にカーソルを移動するためのセクションがあります。また、NCursesプログラミングハウツーもあります。

ずっと前に、私はCでcursesライブラリを非常にうまく使用しました。

更新

ターミナル/シリアルでこれを実行する部分を見逃しました。ANSIエスケープシーケンスは、特にあなたのような単純なタスクの場合に最も簡単であり、このための@SvenMarnachソリューションに同意します。

于 2012-07-13T16:20:09.150 に答える
3
for i in range(10):  
    print("Loading" + "." * i) 

    doSomeTimeConsumingProcessing()

    sys.stdout.write("\033[F") # Cursor up one lin

Pythonでこれを試して、doSomeTimeConsumingProcessing()を必要なルーチンに置き換えて、役立つことを願っています

于 2017-08-26T07:45:57.680 に答える
1

私は間違っているかもしれませんが:

#include <windows.h>


void gotoxy ( int column, int line )
{
  COORD coord;
  coord.X = column;
  coord.Y = line;
  SetConsoleCursorPosition(
    GetStdHandle( STD_OUTPUT_HANDLE ),
    coord
    );
}

Windows標準コンソールで。

于 2014-03-27T10:39:42.270 に答える
1

キャリッジリターンを使用して行の先頭に移動でき、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ます。

于 2020-10-14T20:19:36.820 に答える