Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод сообщений в консоль используя Rake 
V
    Опции темы
UniBomb
Дата 3.3.2011, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 97



Добрый день. Использую Rake для компиляции в gcc, ибо местный make со своими makefil'ами очень не нравится. Пример задачи в рейкфайле:

Код

task :create_obj do
    puts "Create object file #{source}.o"
    sh "avr-gcc -g -Os -Wall -mmcu=#{mmcu} -std=#{std} #{source}.c -o build/#{source}.o"
end

task :build => :create_obj do
    puts "Get load file for FLASH #{source}.hex from #{source}.o"
    sh "avr-objcopy -R .eeprom -O ihex build/#{source}.o build/#{source}.hex"
end


Т.е. ещё хочется выводить сообщения о том, что же в данный момент времени происходит. Но вот беда - все сообщения, которые я вывожу через puts выводятся в самом конце, когда всё сделано. Иными словами сначала я получу сообщения компилятора, который вызываю в задачах, и только потом свои надписи. Можно как-то это исправить? Что я пробовал:

Код

sh 'My text'
sh 'echo my text'

В первом случае рейк ругается, во втором выводится как сама команда echo, так и выводимый ей текст, т.е.:

Код

echo my text
my text


ps: маленький бонус вопрос - а можно ли вызывать задачу из другой? Я не имею в виду зависимости. Сейчас я делаю так: sh "rake build", т.е. рекурсивно запускаю рейк с нужным таргетом. Но может можно как-то проще?  smile 
PM MAIL ICQ Skype   Вверх
source777
Дата 3.3.2011, 19:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(UniBomb @  3.3.2011,  14:28 Найти цитируемый пост)
Но вот беда - все сообщения, которые я вывожу через puts выводятся в самом конце, когда всё сделано.

Странно, не замечал такого поведения, возможно настройки буферизации вывода такие... 
Попробуй вызвать STDOUT.flush после puts

Цитата(UniBomb @  3.3.2011,  14:28 Найти цитируемый пост)
маленький бонус вопрос - а можно ли вызывать задачу из другой? 

Да: 
Код

Rake::Task['full:task:name'].invoke




--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
UniBomb
Дата 4.3.2011, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 97



source777, спасибо, flush помог, но тем не менее всё равно не понятно почему так происходит. За бонус-ответ тоже спасибо, только там кавычки как оказалось не нужны  smile 
PM MAIL ICQ Skype   Вверх
source777
Дата 4.3.2011, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(UniBomb @  4.3.2011,  09:07 Найти цитируемый пост)
flush помог, но тем не менее всё равно не понятно почему так происходит

Раз помог, то как раз всё понятно. Вывод на консоль буферизируется, поэтому по факту будет показан, когда процессор будет не сильно нагружен, а у тебя сразу после вывода ресурсоёмкая задача в виде компиляции стоит, поэтому процессор вспоминает о буфере вывода только после завершения компиляции. А для форсирования вывода на консоль как раз предназначен flush.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
UniBomb
Дата 5.3.2011, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 97



source777, ясно  smile 
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.