我有一个命令行程序,它将记录输出到屏幕。
我希望错误行以红色显示。是否有一些特殊的字符代码可以输出以将文本颜色切换为红色,然后将其切换回白色?
我正在使用红宝石,但我想这会与其他语言相同。
类似的东西:
red = "\0123" # character code
white = "\0223"
print "#{red} ERROR: IT BROKE #{white}"
print "other stuff"
答案 0 :(得分:25)
在Windows上,您可以通过三种方式轻松完成:
require 'win32console'
puts "\e[31mHello, World!\e[0m"
现在,您可以使用名为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 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的文档。
答案 1 :(得分:6)
您需要访问[Win32控制台API](http://msdn.microsoft.com/en-us/library/ms682073(VS.85%29.aspx)。不幸的是,我不知道您是如何从Ruby那样做的。在Perl中,我会使用Win32::Console模块.Windows控制台不响应ANSI转义码。
根据artur02提到的article on colorizing Ruby output,您需要安装&加载win32console gem。
答案 2 :(得分: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 是设置文字颜色的属性。
答案 3 :(得分: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表示恢复默认颜色。
希望这有帮助!
答案 4 :(得分:2)
:
32位字符模式(子系统:控制台)Windows应用程序不会将ANSI转义序列写入控制台
他们必须解释转义码操作并调用原生的Console API
谢谢微软: - (
答案 5 :(得分: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
答案 6 :(得分:2)
我已经创作了一个小型跨平台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了解更多详情。
答案 7 :(得分:0)
据我所知,使用命令行是不可能的,它只是一种颜色......
答案 8 :(得分: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描述如何包装控制台输出以实现效果。
答案 9 :(得分:0)
答案 10 :(得分:0)
很多旧的ANSI Color Codes都可以使用。红色前景的代码就像Escape- [31m。 Escape是27字符,所以“\ 033 [31m”或“\ x1B [31m”,取决于你的逃避计划。
[39m是返回默认颜色的代码。
也可以一次指定多个代码来同时设置前景色和背景色。
您可能需要加载ANSI.sys,请参阅this page。
答案 11 :(得分:0)
用于输出到命令行的标准C / C ++规范未指定用于更改控制台窗口颜色的任何功能。也就是说,Win32中有很多功能可以做这样的事情。
更改Win32控制台颜色的最简单方法是通过iostream.h中的系统命令。此函数调用DOS命令。要更改颜色,我们将使用它来调用颜色命令。例如,system("Color F1");
会使控制台变为白色的蓝色。
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
功能
答案 12 :(得分:0)
最终你需要致电SetConsoleTextAttribute。您可以从GetStdHandle获取控制台屏幕缓冲区句柄。
答案 13 :(得分:0)
我一直在使用一个名为baretail(google it)的免费软件windows tail程序,可以让你做一个windows-appified版本的unix tail命令。它允许您根据您定义的任何关键字着色线条。有什么好处作为一个解决方案是它不依赖于特定的语言或设置等,你只需定义你的配色方案,它就像驴子一样。在我个人的十大免费软件助手中!