我有一个命令行程序,它输出日志到屏幕。

我希望错误行以红色显示。 是否有一些特殊的字符代码我可以输出将文本颜色切换为红色,然后将其切换回白色?

我正在使用红宝石,但我想这与任何其他语言都是一样的。

就像是:

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

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

===============>>#1 票数:25

在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

你也可以像这样扩展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的文档。

===============>>#2 票数:6 已采纳

你需要访问[Win32 Console API]( http://msdn.microsoft.com/en-us/library/ms682073 ( VS.85%29.aspx) 。不幸的是,我不知道你是怎么做的来自Ruby。在Perl中,我使用Win32 :: Console模块.Windows控制台不响应ANSI转义码。

根据artur02提到的关于着色Ruby输出文章 ,你需要安装并加载win32console gem。

===============>>#3 票数: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是用于设置文本颜色的属性。

===============>>#4 票数: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

===============>>#5 票数: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表示恢复默认颜色。

希望这可以帮助!

===============>>#6 票数:2

关于ANSI转义码:

32位字符模式(子系统:控制台)Windows应用程序不会将ANSI转义序列写入控制台

他们必须解释转义码操作并调用本机Console API

谢谢微软:-(

===============>>#7 票数: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

===============>>#8 票数:0

据我所知,使用命令行是不可能的,它只是一种颜色......

===============>>#9 票数: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描述了如何包装控制台输出以实现效果。

===============>>#10 票数:0

您想要ANSI转义码

===============>>#11 票数:0

许多旧的ANSI 颜色代码都有效。 红色前景的代码就像Escape- [31m。 Escape是27字符,所以“\\ 033 [31m”或“\\ x1B [31m”,取决于您的转义方案。

[39m是返回默认颜色的代码。

也可以一次指定多个代码来同时设置前景色和背景色。

您可能必须加载ANSI.sys,请参阅此页面

===============>>#12 票数: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函数

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

===============>>#13 票数:0

最终,您需要调用SetConsoleTextAttribute 您可以从GetStdHandle获取控制台屏幕缓冲区句柄。

===============>>#14 票数:0

我一直在使用一个名为baretail(google it)的免费软件windows tail程序,可以让你做一个windows-appified版本的unix tail命令。 它允许您根据您定义的任何关键字着色线条。 有什么好处作为一个解决方案是它不依赖于特定的语言或设置等,你只需定义你的配色方案,它就像驴子一样。 在我个人十大免费软件助手!

  ask by Orion Edwards translate from so

未解决问题?本站智能推荐:

1回复

Ruby Windows命令提示符前几行

是否可以使用Ruby编辑已经写入命令提示符的内容? 例如,假设我已经向STDOUT写了10行,是否可以将光标移动到石灰5并仅覆盖该行? 谢谢。
25回复

如何在Windows命令行中以不同的颜色回显

我知道color bf命令设置整个命令行窗口的颜色,但是我想用另一种颜色打印一行。
1回复

从批处理文件中更改文本颜色

我制作了一个交互式批处理文件,允许您向批次中的特定配置文件永久更改颜色的人员发送消息。 (它可以将批处理文件的配置文件用作登录。)因此需要知道是否有办法更改批处理文件并将其保存给该特定用户,以便在他们登录时,颜色会更改为他们选择的颜色。 messenger将其用户信息保存在隐藏的.txt
2回复

在批处理文件中随机化文本颜色和背景颜色

我正在尝试制作一个批处理文件,该脚本将在运行脚本时随机分配颜色代码。 我该怎么办?
1回复

如何将ruby命令提示符插入ruby mine?

早些时候,有人质疑在Windows上将终端直接插入Ruby Mine。 它得到了回答,但只是在一定程度上。 我知道如何使用设置在Ruby中打开cmd.exe,但是如何让ruby命令提示符打开? 我的cmd.exe不能与ruby一起使用,我必须使用这条路径,它不能用于前面给出的说明。
10回复

如何以不同的颜色输出我的ruby命令行文本

如何从基于命令行的ruby程序颜色输出put命令? 我很感激任何关于我如何称呼每种不同颜色的参考。 让我们说我们从这开始.. 我得到了我想要的不同颜色的不同文字,你得到了这个想法。 我使用Ubuntu,我需要改变我的方法,以便程序在diff os中正确输出吗?
7回复

如何在Windows命令提示符下运行.sh?

如何在Windows 7命令提示符下运行.sh? 当我尝试在其中运行此行时,我总是收到此错误, 错误, 要么, 错误, 我错过了什么想法? 屏幕抓取,
3回复

在Windows命令提示符下为Perl输出颜色

该问题与以下问题有关: 如何在Windows上从Perl脚本为输出文本着色? 但是更具体一些。 在某种程度上,我已经可以进行跨平台的着色了: use Term::ANSIColor; use Win32::Console; if (!(-f STDOUT)) { if ($^
4回复

在Windows命令提示符下运行Java文件

我想在Windows中运行Java项目。 我首先在Linux中编译了.class文件。 复制回Windows。 现在在路径H:\\deletefiles具有delete.class, delete.java, a.jar, b.jar 。 用于类删除的包是deleteFiles 。
6回复

在命令提示符下运行C ++ - Windows

我知道现在每个人都使用IDE,但我发现在notepad ++中编写代码更简单,使用命令提示符命令编译它,并从那里运行它。 至少适用于Java和Python。 我试图了解如何使用C ++做到这一点,并且无法找到任何好的东西。 是否有任何编译器(如Java的JDK),我可以坚持我的路径,并使用