コマンドプロンプトで何かをインストールする際などに、

進捗が出たり、エラー時にエラーメッセージが赤色で出たりするものがあります。
(pythonのパッケージや、|/-のような回転など)

通常の標準出力では追記で出力されていくだけだと思いますが、
いったん出力した文字列を書き換えたり、
途中から色を変えるのは、どのような方法を使っているのでしょうか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2016/01/16 16:35:16
  • 終了:2016/01/23 16:40:03

回答(2件)

id:studiocherry No.1

studiocherry回答回数266ベストアンサー獲得回数942016/01/16 18:25:25

ANSIエスケースシーケンス(画面制御シーケンス)ですね。

参考:
https://www.grapecity.com/tools/support/powernews/column/clang/047/page02.htm

id:xxyoxx

このサイトを見たところ、WindowsのDOS窓では、起動時に特別なドライバを読み込ませると書いてありましたが、
私の環境では、スタートメニューから起動したコマンドプロンプトに出る文字で
文字が書き換わったり色が変わったりしていました。
さらに特別な方法があるのでしょうかね。
でもヒントにはなりました。ありがとうございます。

2016/01/17 23:33:19
id:a-kuma3 No.2

a-kuma3回答回数4325ベストアンサー獲得回数17732016/01/16 18:41:38

unix 系の話ですよね?
https://linuxjf.osdn.jp/JFdocs/Bash-Prompt-HOWTO-5.html
http://d.hatena.ne.jp/zariganitosh/20150224/escape_sequence

回転するやつは、一文字カーソルを戻して | / - \ を書いています。
一文字戻すのは ANSI エスケープシーケンスよりは、ターミナルの制御コードで ^h を使う方が多いかも。
もしくは改行せずにカーソルを行頭に戻す ^r か。

id:xxyoxx

1文字戻すというエスケープシーケンスがあるのは、ちょっと思いつきませんでした。
知ってみると、まさにそれが制御文字という感じでしたが(^^;
ちなみにwindowsのコマンドプロンプトです。

2016/01/17 23:35:17
id:a-kuma3

Windows のコマンドプロンプトでも似たようなことはできます。
Ruby のコードですけど、緑色でくるくる回るやつはこんな感じ。

print "\033[32m" + "\r"     # 緑に
10.times {
    [ '|', '/', '-', '\\' ].each { |ch|
        print ch + "\r"
        sleep 0.25
    }
}
print "\033[0m" + "\r"      # 元に戻す
2016/01/18 01:08:14

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません