Domanda

Ho un programma da riga di comando, che visualizza la registrazione sullo schermo.

Voglio che le righe di errore vengano visualizzate in rosso.Esistono codici di caratteri speciali che posso emettere per cambiare il colore del testo in rosso e quindi riportarlo in bianco?

Sto usando Ruby ma immagino che sarebbe lo stesso in qualsiasi altra lingua.

Qualcosa di simile a:

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

print "#{red} ERROR: IT BROKE #{white}"
print "other stuff"
È stato utile?

Soluzione

È necessario accedere all'[API della console Win32](http://msdn.microsoft.com/en-us/library/ms682073(VS.85%29.aspx).Sfortunatamente, non so come faresti con Ruby.In Perl, utilizzerei il file Win32::Console modulo.La console Windows non risponde ai codici di escape ANSI.

Secondo il articolo sulla colorazione dell'output di Ruby menzionato da artur02, è necessario installare e caricare il gem win32console.

Altri suggerimenti

Su Windows, puoi farlo facilmente in tre modi:

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

Ora potresti estendere String con un piccolo metodo chiamato red

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

 puts "Hello, World!".red

Inoltre puoi estendere String in questo modo per ottenere più colori:

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

Oppure, se puoi installare gemme:

gem install term-ansicolor

E nel tuo programma:

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

Per ulteriori informazioni e possibili utilizzi, consultare la documentazione di term/ansicolor.

Puoi leggere qui un articolo bello e illustrato:http://kpumuk.info/ruby-on-rails/colorizing-console-ruby-script-output/

Penso che l'impostazione del colore del testo della console sia piuttosto specifica della lingua.Ecco un esempio in C# da 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 è la proprietà per impostare il colore del testo.

Potresti utilizzare una sequenza di escape ANSI, ma ciò non farà ciò che desideri nelle versioni moderne di Windows.Wikipedia ha un articolo molto informativo:

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

Quindi la risposta alla tua domanda originale è quasi certamente "no". Tuttavia, puoi cambiare il colore di primo piano senza scrivere una sequenza di fuga, ad esempio invocando una funzione API Win32.Non so come fare questo genere di cose in Ruby a priori, ma qualcun altro sembra essere riuscito:

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

Immagino che vorresti usare 4 per il rosso scuro o 12 per il rosso brillante e 7 per ripristinare il colore predefinito.

Spero che questo ti aiuti!

sui codici di escape ANSI:

Modalità carattere a 32 bit (sottosistema:console) Le applicazioni Windows non scrivono sequenze di escape ANSI sulla console

Devono interpretare le azioni del codice di escape e chiamare invece l'API della console nativa

Grazie Microsoft :-(

color [background][foreground]

Dove i colori sono definiti come segue:

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

Ad esempio, per cambiare lo sfondo in blu e il primo piano in grigio, digitare:

color 18

Ho creato un piccolo gioiello multipiattaforma che lo gestisce perfettamente funzionando su sistemi Windows o POSIX, sia con MRI che con JRuby.

Non ha dipendenze e utilizza codici ANSI su sistemi POSIX e FFI (JRuby) o Fiddler (MRI) per Windows.

Per usarlo, semplicemente:

gem install color-console

ColorConsole fornisce metodi per visualizzare righe di testo in diversi colori, utilizzando le funzioni Console.write e 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

Visita la home page del progetto su https://github.com/agardiner/color-console per ulteriori dettagli.

Per quanto ne so non è possibile con una riga di comando, è solo un colore...

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

Puoi cambiare il colore usando un semplice programma C#, http://powerof2games.com/node/31 descrive come eseguire il wrapper dell'output della console per ottenere l'effetto.

La specifica C/C++ standard per l'output sulla riga di comando non specifica alcuna funzionalità per modificare il colore della finestra della console.Detto questo, ci sono molte funzioni in Win32 per fare una cosa del genere.

Il modo più semplice per cambiare il colore della console Win32 è tramite il comando di sistema in iostream.h.Questa funzione richiama un comando DOS.Per cambiare i colori, lo useremo per invocare il comando color.Per esempio, system("Color F1"); renderà la console blu scuro su bianco.

Colori DOS

I colori disponibili per l'uso con il comando sono i sedici colori DOS, ciascuno rappresentato con una cifra esadecimale.Il primo è lo sfondo e il secondo è il primo piano.

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

Solo questo piccolo tocco di colore rende i programmi per console visivamente più piacevoli.Tuttavia, il comando Colore cambierà il colore dell'intera console.Per controllare le singole celle, dobbiamo utilizzare le funzioni di windows.h.

Fallo, devi usare il file SetConsoleAttribute funzione

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

Molte delle vecchie ANSI Codici colore lavoro.Il codice per un primo piano rosso è qualcosa come Escape-[31m.L'escape è il carattere 27, quindi è "\033[31m" o "\x1B[31m", a seconda del tuo schema di escape.

[39m è il codice per tornare al colore predefinito.

È anche possibile specificare più codici contemporaneamente per impostare contemporaneamente il colore di primo piano e di sfondo.

Potrebbe essere necessario caricare ANSI.sys, vedere questa pagina.

Alla fine devi chiamare SetConsoleTextAttribute.È possibile ottenere un handle del buffer dello schermo della console da OttieniStdHandle.

Utilizzo da anni un programma Windows Tail gratuito chiamato Baretail (cercalo su Google) che ti consente di eseguire una versione appificata per Windows del comando Unix Tail.Ti consente di colorare le linee in base alle parole chiave che definisci.La cosa bella di questa soluzione è che non è legata a una lingua o configurazione specifica, ecc., definisci solo la tua combinazione di colori ed è come Donkey Kong.Nella mia personale top 10 degli aiutanti freeware!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top