我有一个命令行程序,输出日志到屏幕上。
我想错误行显示为红色。 是否有一些特殊字符代码可以输出将文本颜色切换为红色,然后将其切换回白色?
我使用ruby,但我想这将是相同的任何其他语言。
就像是:
red = "\0123" # character code white = "\0223" print "#{red} ERROR: IT BROKE #{white}" print "other stuff"
您需要访问[Win32 Console API]( http://msdn.microsoft.com/en-us/library/ms682073 ( VS.85%29.aspx) 。不幸的是,我不知道你会怎么做在Perl中,我使用Win32 :: Console模块,Windows控制台不响应ANSI转义码。
根据artur02提到的Ruby输出着色的文章 ,您需要安装并加载win32console gem。
在Windows上,你可以通过三种方式轻松完成:
require 'win32console' puts "\e[31mHello, World!\e[0m"
现在你可以用一个叫做red
的小方法来扩展String
require 'win32console' class String def red "\e[31m#{self}\e[0m" end end puts "Hello, World!".red
你也可以像这样扩展字符串来获得更多的颜色:
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 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下不能做你想要的。 维基百科有一个非常丰富的文章:
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
我创作了一个跨平台的小型Gem,可以在MRI和JRuby下无缝运行在Windows或POSIX系统上。
它没有依赖关系,在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");
将使控制台darkblue在白色。
DOS颜色
可用于该命令的颜色是十六个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
函数
很多旧的ANSI 颜色代码工作。 红色前景的代码就像Escape- [31m。 逃生是字符27,所以这是“\ 033 [31米”或“\ x1B [31米”,根据您的逃避计划。
[39m是返回到默认颜色的代码。
也可以同时指定多个代码以同时设置前景色和背景色。
您可能需要加载ANSI.sys,请参阅此页面 。
最终你需要调用SetConsoleTextAttribute 。 您可以从GetStdHandle获取控制台屏幕缓冲区句柄。
我一直在使用一个叫做baretail(google it)的免费软件窗口尾巴程序,它可以让你做一个windows-appified版本的unix tail命令。 它可以让你根据你定义的任何关键字来着色线条。 作为一种解决方案,它的好处在于它不受特定语言或设置等的约束,您只需定义颜色方案,并像驴一样定义。 在我的个人十大免费软件帮手!