2015-06-23 3 views
0

Есть ли какой-либо способ запустить процесс в фоновом режиме, показывая обновления в реальном времени в stdout и сохраняя только последнюю строку (tail -n 1 savefile) в файл? Там может быть где-то между 1 и 15 тестов, запущенных одновременно, и мне нужно уметь видеть, что тесты запущены, но я не хочу сохранять весь вывод текста.Напишите в stdout, но сохраните tail -n 1 в файл

Я должен упомянуть, так как тесты работают в фоновом режиме Я использую checkpid цикл ждать испытания, чтобы закончить

также, если это помогает это, как мой сценарий запуска тестов ...

set runtest [exec -ignorestderr bsub -I -q lin_i make $testvar SEED=1 VPDDUMP=on |tail -n 1 >> $path0/runtestfile &] 

Я обнаружил, что если я использую | tee это вызывает цикл checkpid пропустить, но если я |tee не отображает выход.

ответ

0

Будет лучше использовать более простой конвейер с явным управлением обработкой вывода в Tcl вместо использования tail -ntee), чтобы имитировать его.

set pipeline($testvar) [open |[list bsub -I -q lin_i make $testvar SEED=1 VPDDUMP=on]] 
fileevent $pipeline($testvar) readable [list handleInput $testvar] 
fconfigure $pipeline($testvar) -blocking 0 

# The callback for when something is available to be read 
proc handleInput {testvar} { 
    upvar ::pipeline($testvar) chan ::status($testvar) status 
    if {[gets $chan line] >= 0} { 
     # OK, we've got an update to the current status; stash in a variable 
     set status $line 
     # Echo to stdout 
     puts $line 
     return 
    } elseif {[eof $chan]} { 
     if {[catch {close $line}]} { 
      puts "Error from pipeline for '$testvar'" 
     } 
     unset chan 
     # I don't know if you want to do anything else on termination 
     return 
    } 
    # Nothing to do otherwise; don't need to care about very long lines here 
} 

Этот код, плюс немного vwait включить обработку событий на основе (при условии, что вы также не используя Tk), позволит вам читать из трубопровода, пока не мешает вам делать другие вещи. Вы можете даже запустить сразу несколько конвейеров; Tcl будет хорошо справляться. Более того, установка записи trace на массив ::status позволит вам отслеживать изменения в всех трубопроводов сразу.

+0

Есть ли способ дождаться завершения тестирования до того, как он будет продолжен до конца сценария? Предполагается, что он заполняет «runtestfile», который имеет результаты тестов, и скрипт определяет, все ли они прошли или нет. –

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

  • Нет связанных вопросов^_^