13

ログを画面に出力するコマンドラインプログラムがあります。

エラー行を赤で表示したい。テキストの色を赤に切り替えてから白に戻すために出力できる特殊文字コードはありますか?

私はルビーを使用していますが、これは他の言語でも同じだと思います。

何かのようなもの:

red = "\0123" # character code
white = "\0223"

print "#{red} ERROR: IT BROKE #{white}"
print "other stuff"
4

14 に答える 14

27

Windows では、次の 3 つの方法で簡単に実行できます。

require 'win32console'
puts "\e[31mHello, World!\e[0m"

これで、 String と呼ばれる小さなメソッドで拡張できますred

 require 'win32console'
 class String
   def red
     "\e[31m#{self}\e[0m"
   end
 end

 puts "Hello, World!".red

また、次のように String を拡張して、より多くの色を取得することもできます。

require 'win32console'

class String
  { :reset          =>  0,
    :bold           =>  1,
    :dark           =>  2,
    :underline      =>  4,
    :blink          =>  5,
    :negative       =>  7,
    :black          => 30,
    :red            => 31,
    :green          => 32,
    :yellow         => 33,
    :blue           => 34,
    :magenta        => 35,
    :cyan           => 36,
    :white          => 37,
  }.each do |key, value|
    define_method key do
      "\e[#{value}m" + self + "\e[0m"
    end
  end
end

puts "Hello, World!".red

または、gem をインストールできる場合:

gem install term-ansicolor

そしてあなたのプログラムでは:

require 'win32console'
require 'term/ansicolor'

class String
  include Term::ANSIColor
end

puts "Hello, World!".red
puts "Hello, World!".blue
puts "Annoy me!".blink.yellow.bold

詳細と使用方法については、term/ansicolor のドキュメントを参照してください。

于 2008-09-17T00:49:42.123 に答える
7

Win32 コンソール APIにアクセスする必要があります。残念ながら、Ruby からそれを行う方法がわかりません。Perl では、Win32::Consoleモジュールを使用します。Windows コンソールは ANSI エスケープ コードに応答しません。

artur02 が言及した Ruby 出力のカラー化に関する記事によると、win32console gem をインストールしてロードする必要があります。

于 2008-09-16T22:21:08.363 に答える
3

あなたはここで良いイラスト付きの記事を読むことができます:http: //kpumuk.info/ruby-on-rails/colorizing-console-ruby-script-output/

コンソールのテキストの色の設定は、かなり言語固有だと思います。これは、MSDNのC#の例です。

for (int x = 0; x < colorNames.Length; x++)
{
  Console.Write("{0,2}: ", x);
  Console.BackgroundColor = ConsoleColor.Black;
  Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), colorNames[x]);
  Console.Write("This is foreground color {0}.", colorNames[x]);
  Console.ResetColor();
  Console.WriteLine();
}

Console.ForegroundColorは、テキストの色を設定するためのプロパティです。

于 2008-09-16T22:17:48.650 に答える
2

ANSIエスケープシーケンスを使用することもできますが、それは最新バージョンのWindowsでは希望どおりに機能しません。ウィキペディアには非常に有益な記事があります:

http://en.wikipedia.org/wiki/ANSI_escape_code

したがって、元の質問に対する答えはほぼ確実に「いいえ」です。ただし、たとえばWin32 API関数を呼び出すことにより、エスケープシーケンスを記述せずに前景色を変更できます。Rubyでこの種のことを頭のてっぺんから行う方法はわかりませんが、他の誰かが管理しているようです。

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/241925

濃い赤には4、明るい赤には12、デフォルトの色に戻すには7を使用したいと思います。

お役に立てれば!

于 2008-09-16T22:29:16.033 に答える
2

color [background][foreground]

色は次のように定義されています。

0 = Black    8 = Gray
1 = Blue     9 = Light Blue
2 = Green    A = Light Green
3 = Aqua     B = Light Aqua
4 = Red      C = Light Red
5 = Purple   D = Light Purple
6 = Yellow   E = Light Yellow
7 = White    F = Bright White

たとえば、背景を青に、前景をグレーに変更するには、次のように入力します。

color 18

于 2008-09-16T22:35:09.390 に答える
2

ANSI エスケープ コード:

32 ビット文字モード (サブシステム:コンソール) Windows アプリケーションは、ANSI エスケープ シーケンスをコンソールに書き込みません。

エスケープ コード アクションを解釈し、代わりにネイティブ コンソール API を呼び出す必要があります。

ありがとうマイクロソフト:-(

于 2008-09-16T22:33:17.850 に答える
2

私は、MRI と JRuby の両方の下で、Windows または POSIX システム上でシームレスに動作する小さなクロスプラットフォームの gem を作成しました。

依存関係はなく、POSIX システムでは ANSI コードを使用し、Windows では FFI (JRuby) または Fiddler (MRI) を使用します。

使用するには、次のようにします。

gem install color-console

ColorConsole は、Console.write および Console.puts 関数を使用して、テキスト行を異なる色で出力するメソッドを提供します。

require 'color-console'

Console.puts "Some text"                    # Outputs text using the current  console colours
Console.puts "Some other text", :red        # Outputs red text with the current background
Console.puts "Yet more text", nil, :blue    # Outputs text using the current foreground and a blue background

# The following lines output BlueRedGreen on a single line, each word in the appropriate color
Console.write "Blue ", :blue
Console.write "Red ", :red
Console.write "Green", :green

詳細については、プロジェクトのホームページ ( https://github.com/agardiner/color-console)にアクセスしてください。

于 2015-07-31T09:42:52.950 に答える
0

古いANSIカラーコードの多くは機能します。赤い前景のコードは、Escape-[31m。エスケープは文字27であるため、エスケープスキームに応じて、「\033[31m」または「\x1B[31m」」になります。

[39mはデフォルトの色に戻すためのコードです。

複数のコードを一度に指定して、前景色と背景色を同時に設定することもできます。

ANSI.sysをロードする必要がある場合があります。このページを参照してください。

于 2008-09-16T22:14:34.197 に答える
0

私の知る限り、コマンドラインでは不可能ですが、それは1色だけです...

于 2008-09-16T22:11:12.800 に答える
0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Console_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.DarkRed;
            Console.WriteLine("Hello World");
            Console.ReadKey();
        }
    }
}

簡単なC#プログラムを使用して色を変更できます。http://powerof2games.com/node/31では、コンソール出力をラップして効果を実現する方法について説明しています。

于 2008-09-16T22:12:12.847 に答える
0

ANSIエスケープコードが必要です。

于 2008-09-16T22:12:23.343 に答える
0

コマンドラインに出力するための標準のC/C ++仕様では、コンソールウィンドウの色を変更する機能は指定されていません。とは言うものの、Win32にはそのようなことを行うための多くの機能があります。

Win32コンソールの色を変更する最も簡単な方法は、iostream.hのシステムコマンドを使用することです。この関数はDOSコマンドを呼び出します。色を変更するには、それを使用してcolorコマンドを呼び出します。たとえばsystem("Color F1");、コンソールを白地にダークブルーにします。

DOSカラー

コマンドで使用できる色は、それぞれ16進数で表される16のDOS色です。1つ目は背景で、2つ目は前景です。

0 = Black    8 = Gray
1 = Blue     9 = Light Blue
2 = Green    A = Light Green
3 = Aqua     B = Light Aqua
4 = Red      C = Light Red
5 = Purple   D = Light Purple
6 = Yellow   E = Light Yellow
7 = White    F = Bright White

このほんの少しの色で、コンソールプログラムがより視覚的に心地よくなります。ただし、[色]コマンドを使用すると、コンソール全体の色が変更されます。個々のセルを制御するには、windows.hの関数を使用する必要があります。

SetConsoleAttribute関数を使用する必要があることを行います

http://msdn.microsoft.com/en-us/library/ms686047.aspx

于 2008-09-16T22:18:21.740 に答える
0

最終的には、 SetConsoleTextAttributeを呼び出す必要があります。GetStdHandleからコンソール画面のバッファハンドルを取得できます。

于 2008-09-16T22:24:12.647 に答える
0

私は、UNIX テール コマンドの Windows 対応バージョンを実行できるようにする、baretail (google it) と呼ばれるフリーウェアの Windows テール プログラムを何年も使用してきました。定義したキーワードに応じて、行に色を付けることができます。ソリューションとして優れているのは、特定の言語や設定などに縛られていないことです。配色を定義するだけで、ドンキー コングのようになります。私の個人的なトップ 10 のフリーウェア ヘルパーです!

于 2008-09-17T00:20:56.170 に答える