Третья строка,
hour = round(now.hour, 2)
round
вернет 22.00
с 22:00 ~ 22:59 и 23.00
с 23:00 ~ 23:59.
Итак, ваше состояние ниже этого никогда не получалось.
(hour > 22.00 and hour < 23.00)
(22.00
не больше, чем 22.00
, а 23.00
не меньше, чем 23.00
.)
Исправлено условие:
(hour >= 22.00 and hour < 23.00)
или [ 1117]
(hour > 22.00 and hour <= 23.00)
или, может быть, вы хотите
(hour == 22.00)
Необходимо получить доступ [Консольный API Win32] ( http://msdn.microsoft.com/en-us/library/ms682073 (По сравнению с 85%29.aspx) . К сожалению, я не знаю, как Вы сделали бы это от Ruby. В Perl я использовал бы Win32:: Консольный модуль. Консоль Windows не отвечает на управляющие коды ANSI.
Согласно статья о колоризации Ruby произвел , что artur02 упомянул, необходимо установить & загрузите win32console драгоценный камень.
Вы могли использовать escape-последовательность ANSI, но так не пойдет, что Вы хотите под современными версиями Windows. Википедия имеет очень информативную статью:
http://en.wikipedia.org/wiki/ANSI_escape_code
, Таким образом, ответ на Ваш исходный вопрос является почти наверняка "нет". Однако можно изменить основной цвет, не пишущий escape-последовательность, например, путем вызова Win32 API function. Я не знаю, как сделать этот вид вещи в Ruby первое, что пришло на ум, но кто-то еще, кажется, справился:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/241925
, я предполагаю, что Вы хотели бы использовать 4 для темно-красного или 12 для яркого красного, и 7 для восстановления цвета по умолчанию.
Hope это помогает!
Можно прочитать здесь хорошую и проиллюстрированную статью: http://kpumuk.info/ruby-on-rails/colorizing-console-ruby-script-output/
я думаю, устанавливая консольный цвет текста, является довольно определенным для языка. Вот пример в C# из 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();
}
Консоль. ForegroundColor является свойством для установки цвета текста.
На окнах можно сделать это легко тремя способами:
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
, Также можно расширить Строку как это для получения большего количества цветов:
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 для получения дополнительной информации и возможного использования.
Я использовал бесплатную программу хвоста окон, названную baretail (погуглите его), целую вечность, который позволяет Вам сделать версию окон-appified команды хвоста Unix. Это позволяет Вам colorize строки, зависящие от любых ключевых слов, которые Вы определяете. Что хорошо об этом, поскольку решение - не связанный с определенным языком или установкой, и т.д., Вы просто определяете свою цветовую схему и на подобном осле kong. В моих персональных лучших 10 бесплатных помощниках!
В конечном счете необходимо звонить SetConsoleTextAttribute. Можно добраться, консоль скрывают буферный дескриптор от GetStdHandle.
Много старого ANSI Цветовые коды работа. Код для красного переднего плана - что-то как Escape - [31 м. Escape является символом 27, таким образом, это "\033 [31 м" или "\x1B [31 м", в зависимости от Вашей схемы выхода.
[39 м код для возврата к цвету по умолчанию.
также возможно определить несколько кодов сразу для выбирания основного цвета и цвета фона одновременно.
Вам, вероятно, придется загрузить ANSI.sys, видеть эта страница .
Стандартная спецификация 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
функция
Насколько я знаю, что это не возможно с командной строкой, это - всего один цвет...
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 описывает, как можно обернуть консольный вывод для достижения эффекта.
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
на управляющих кодах ANSI:
32-разрядный текстовый режим (subsystem:console) Приложения Windows не пишет escape-последовательности ANSI в консоль
, Они должны интерпретировать действия управляющего кода и назвать собственный Консольный API вместо этого
Спасибо Microsoft:-(