Question

J'ai un programme en ligne de commande, qui affiche la journalisation à l'écran.

Je veux que les lignes d'erreur apparaissent en rouge. Existe-t-il des codes de caractères spéciaux que je peux générer pour passer la couleur du texte en rouge, puis la redéfinir en blanc?

J'utilise ruby ??mais j'imagine que ce serait la même chose dans n'importe quelle autre langue.

Quelque chose comme:

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

print "#{red} ERROR: IT BROKE #{white}"
print "other stuff"
Était-ce utile?

La solution

Vous devez accéder à [API de la console Win32] ( http://msdn.microsoft.com/en-us/library/ms682073 (VS.85% 29.aspx) . Malheureusement, je ne sais pas comment vous pourriez le faire avec Ruby. Dans Perl, je voudrais utiliser le module Win32 :: Console . La console Windows ne fonctionne pas. répondre aux codes d'échappement ANSI.

D'après l'article sur la colorisation de la sortie Ruby cet artur02 mentionné, vous devez installer & amp; chargez le joyau win32console.

Autres conseils

Sous Windows, vous pouvez le faire facilement de trois manières:

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

Vous pouvez maintenant étendre String avec une petite méthode appelée red

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

 puts "Hello, World!".red

Vous pouvez également étendre String comme ceci pour obtenir plus de couleurs:

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

Ou, si vous pouvez installer des gems:

gem install term-ansicolor

Et dans votre programme:

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

Veuillez consulter la documentation relative à term / ansicolor pour plus d'informations et une utilisation éventuelle.

Vous pouvez lire ici un bon article illustré: http://kpumuk.info/ruby-on-rails / colorizing-console-ruby-script-output /

Je pense que la définition de la couleur du texte de la console est assez spécifique à la langue. Voici un exemple en C # de MSDN:

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 est la propriété permettant de définir la couleur du texte.

Vous pouvez utiliser une séquence d'échappement ANSI, mais cela ne fera pas ce que vous voulez dans les versions modernes de Windows. Wikipedia a un article très informatif:

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

La réponse à votre question initiale est donc presque certainement "Non". Toutefois, vous pouvez modifier la couleur de premier plan sans écrire de séquence d'échappement, par exemple en appelant une fonction API Win32. Je ne sais pas comment faire ce genre de chose à Ruby par cœur, mais quelqu'un d'autre semble avoir réussi:

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

J'imagine que vous voudriez utiliser 4 pour le rouge foncé ou 12 pour le rouge vif et 7 pour rétablir la couleur par défaut.

J'espère que ça aide!

sur les codes d'échappement ANSI:

  

Mode caractère 32 bits (sous-système: console) Les applications Windows n'écrivent pas de séquences d'échappement ANSI sur la console

     

Ils doivent interpréter les actions du code d'échappement et appeler à la place l'API de console native

Merci Microsoft: - (

couleur [arrière-plan] [premier plan]

Les couleurs sont définies comme suit:

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

Par exemple, pour modifier l’arrière-plan en bleu et le premier plan en gris, tapez:

couleur 18

J'ai créé un petit joyau multi-plateforme qui gère ce système de manière transparente, fonctionnant sous Windows ou les systèmes POSIX, sous MRI et JRuby.

Il n'a pas de dépendances et utilise des codes ANSI sur les systèmes POSIX, ainsi que FFI (JRuby) ou Fiddler (MRI) pour Windows.

Pour l'utiliser, il vous suffit de:

gem install color-console

ColorConsole fournit des méthodes pour générer des lignes de texte de différentes couleurs, à l'aide des fonctions Console.write et 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

Visitez la page d'accueil du projet à l'adresse https://github.com/agardiner/color-console pour plus de détails.

Autant que je sache, ce n'est pas possible avec une ligne de commande, ce n'est qu'une couleur ...

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();
        }
    }
}

Vous pouvez modifier la couleur à l'aide d'un simple programme C #, http://powerof2games.com/node/31 décrit comment encapsuler la sortie de la console pour obtenir l’effet souhaité.

La spécification standard C / C ++ pour la sortie sur la ligne de commande ne spécifie aucune possibilité de changer la couleur de la fenêtre de la console. Cela dit, il existe de nombreuses fonctions dans Win32 pour faire une telle chose.

Le moyen le plus simple de changer la couleur de la console Win32 consiste à utiliser la commande système de iostream.h. Cette fonction appelle une commande DOS. Pour changer les couleurs, nous allons l'utiliser pour appeler la commande color. Par exemple, system ("Couleur F1"); rendra la console foncée en blanc.

Couleurs DOS

Les couleurs utilisables avec la commande sont les seize couleurs DOS représentées chacune par un chiffre hexadécimal. Le premier étant le fond et le second le premier plan.

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

Juste cette petite touche de couleur rend les programmes de la console plus attrayants visuellement. Cependant, la commande Couleur changera la couleur de la console entière. Pour contrôler des cellules individuelles, nous devons utiliser les fonctions de windows.h.

Faites cela, vous devez utiliser la fonction SetConsoleAttribute

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

Beaucoup des anciens codes de couleur ANSI fonctionnent. Le code pour un avant-plan rouge est quelque chose comme Escape- [31m. Escape est le caractère 27, donc "& 033 [31m"). ou "\ x1B [31m", en fonction de votre schéma d'échappement.

[39m est le code pour revenir à la couleur par défaut.

Il est également possible de spécifier plusieurs codes à la fois pour définir simultanément les couleurs de premier plan et d'arrière-plan.

Vous devrez peut-être charger ANSI.sys, voir ceci. page .

Enfin, vous devez appeler SetConsoleTextAttribute . Vous pouvez obtenir un descripteur de tampon d'écran de la console auprès de GetStdHandle .

J'utilise un logiciel gratuit Windows tail appelé baretail (google it) qui vous permet de faire une version Windows de la commande unix tail-appified. Il vous permet de colorier les lignes en fonction des mots-clés que vous définissez. Ce qui est bien avec cette solution, c’est qu’elle n’est pas liée à une langue ou à une configuration spécifique, etc., vous définissez simplement votre jeu de couleurs et elle est comme un âne kong. Dans mon top 10 personnel gratuit de freeware!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top