2014-09-25 1 views
1

Я использую вспомогательный скрипт для выполнения тестов rspec.Как сохранить выходной цвет при выполнении процесса в Ruby?

command = "rake speC#{path} #{scope}" 
output = `#{command}` 
puts output 

Это работает отлично, за исключением того, что я потеряю все цвета из rake rspec выхода. Соответствующие коды ANSI, как представляется, не содержатся в строке output.

Как я могу выполнить процесс, чтобы он возвращал вывод, который включает в себя цвет текста?

+0

Возможный дубликат [Ruby popen3 и ANSI color] (https://stackoverflow.com/questions/5526842/ruby-popen3-and-ansi-colour) – thisismydesign

ответ

1

Kernel.exec() получает мне решение, которое я хочу (цветные RSpec выхода), но он делает это замены моего процесса сценария рубинового с RSpec процессом. Это означает, что я ничего не могу сделать с output или запускать что-либо после вызова rspec.

Это приемлемо в моей конкретной ситуации, но не идеально, как общее решение. Поэтому я бы хотел получить лучший ответ, если он доступен.

0

RSpec отключит цвет, если он не записывается в tty (то есть в консоли).

В случае RSpec вы можете принудительно окрасить rspec --tty или через рейк rake spec SPEC_OPTS=' --tty'.

Смотрите также Ruby popen3 and ANSI colour

Однако это решение еще специфичны для Rspec. Мне было бы интересно услышать общий.

0

Оказывается, что можно запускать команды в псевдотерминале через PTY module, чтобы сохранить пользовательское поведение, похожее на терминал. Кредиты идут к создателю tty-command самоцвета (see this issue) который реализовал это поведение в его перл:

require 'tty-command' 
cmd = TTY::Command.new(pty: true) 
cmd.run('rake', 'rspec') 

Имейте в виду, что использование псевдо-терминал может иметь нежелательные побочные эффекты, такие как некоторые git команды using a pager, который по существу будет заставить команды зависать. Таким образом, введение функциональности может быть изменением.

Смежные вопросы