문제

화면에 로깅을 출력하는 명령줄 프로그램이 있습니다.

오류 줄을 빨간색으로 표시하고 싶습니다.텍스트 색상을 빨간색으로 전환한 다음 다시 흰색으로 전환하기 위해 출력할 수 있는 특수 문자 코드가 있습니까?

저는 Ruby를 사용하고 있지만 다른 언어에서도 마찬가지일 것이라고 생각합니다.

다음과 같은 것 :

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

print "#{red} ERROR: IT BROKE #{white}"
print "other stuff"
도움이 되었습니까?

해결책

[Win32 콘솔 API](http://msdn.microsoft.com/en-us/library/ms682073(VS.85%29.aspx).불행히도 Ruby에서 어떻게 그렇게 할 수 있는지 모르겠습니다.Perl에서는 Win32::콘솔 기준 치수.Windows 콘솔은 ANSI 이스케이프 코드에 응답하지 않습니다.

에 따르면 Ruby 출력 색상화에 대한 기사 artur02가 언급한 것처럼, win32console gem을 설치하고 로드해야 합니다.

다른 팁

Windows에서는 다음 세 가지 방법으로 쉽게 수행할 수 있습니다.

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

자세한 내용과 가능한 사용법은 용어/ansicolor에 대한 문서를 참조하세요.

여기에서 훌륭하고 삽화가 포함된 기사를 읽을 수 있습니다.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 텍스트 색상을 설정하는 속성입니다.

ANSI 이스케이프 시퀀스를 사용할 수 있지만 최신 버전의 Windows에서는 원하는 대로 작동하지 않습니다.Wikipedia에는 ​​매우 유익한 기사가 있습니다.

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을 사용하는 것이 좋습니다.

도움이 되었기를 바랍니다!

ANSI 이스케이프 코드:

32비트 문자 모드(하위 시스템:콘솔) Windows 애플리케이션은 콘솔에 ANSI 이스케이프 시퀀스를 쓰지 않습니다.

이스케이프 코드 작업을 해석하고 대신 기본 콘솔 API를 호출해야 합니다.

고마워요 마이크로소프트 :-(

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

저는 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 상세 사항은.

내가 아는 한 명령줄로는 불가능하고 단지 하나의 색상일 뿐입니다...

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 효과를 얻기 위해 콘솔 출력을 래핑하는 방법을 설명합니다.

당신이 원하는 ANSI 이스케이프 코드.

명령줄에 출력하기 위한 표준 C/C++ 사양에서는 콘솔 창의 색상을 변경하는 기능을 지정하지 않습니다.즉, Win32에는 이러한 작업을 수행하는 많은 기능이 있습니다.

Win32 콘솔의 색상을 변경하는 가장 쉬운 방법은 iostream.h의 시스템 명령을 사용하는 것입니다.이 함수는 DOS 명령을 호출합니다.색상을 변경하려면 이를 사용하여 색상 명령을 호출합니다.예를 들어, system("Color F1"); 콘솔을 흰색 바탕에 진한 파란색으로 만듭니다.

도스 색상

명령과 함께 사용할 수 있는 색상은 각각 16진수로 표시되는 16개의 DOS 색상입니다.첫 번째는 배경이고 두 번째는 전경입니다.

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 명령은 전체 콘솔의 색상을 변경합니다.개별 셀을 제어하려면 windows.h의 함수를 사용해야 합니다.

그렇게하려면 SetConsoleAttribute 기능

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

많은 오래된 ANSI 색상 코드 일하다.빨간색 전경에 대한 코드는 Escape-[31m.이스케이프는 문자 27이므로 이스케이프 방식에 따라 "\033[31m" 또는 "\x1B[31m")입니다.

[39m은 기본 색상으로 돌아가는 코드입니다.

전경색과 배경색을 동시에 설정하기 위해 여러 코드를 동시에 지정하는 것도 가능합니다.

ANSI.sys를 로드해야 할 수도 있습니다. 이 페이지.

결국 전화해봐야지 SetConsoleText속성.다음에서 콘솔 화면 버퍼 핸들을 얻을 수 있습니다. GetStdHandle.

나는 unix tail 명령의 Windows 응용 버전을 수행할 수 있는 baretail(google it)이라는 프리웨어 Windows tail 프로그램을 오랫동안 사용해 왔습니다.정의한 키워드에 따라 라인에 색상을 지정할 수 있습니다.솔루션으로서 좋은 점은 특정 언어나 설정 등에 얽매이지 않고 색 구성표를 정의하고 동키콩처럼 사용할 수 있다는 것입니다.내 개인적인 상위 10개 프리웨어 도우미 중 하나입니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top