Сохраните терминальный вывод к переменной в expect/tcl

Hej все, я должен использовать интерактивную программу, и я хочу автоматизировать его с, ожидают. Мои события в Linux и сценариях не являются лучшими. Таким образом, это - вывод программы:

enter minimum cross-correlation threshold: 0.15
enter the range and azimuth error thresholds: 1.6 1.0

range, azimuth error thresholds: 1.60000     1.00000
cross-correlation threshold: 0.15000
*
*
*
model fit std. dev. (samples) range: 0.5298   azimuth: 0.4166
set new error bounds? (0: no, 1: yes): 0

Первые две строки и последняя являются интерактивными. Таким образом с ожидают и отправляют, это не была проблема для ввода порогов в течение одного времени. Но я хочу выполнить итерации этого процесса. Поэтому я должен сохранить результаты "диапазон: 0,5298 азимута: 0,4166 дюйма в две переменные и затем выполненный снова, пока я не получаю хорошие результаты, например, "диапазон: 0,02 азимута: 0,02 дюйма.

У кого-либо есть идея, как я могу сохранить результаты, сравнить их и выполнить итерации процесса?

Это работает:

#!/usr/bin/expect
spawn ./offset_fitm_exp
expect "enter minimum cross-correlation threshold:" { send "0.15\r" }
expect "enter the range and azimuth error thresholds:" { send "1.6 1.0\r" }
expect "set new error bounds? (0: no, 1: yes):" { send "0\r" }
interact

Спасибо за помощь! Bjoern

0
задан 2 February 2016 в 18:01

2 ответа

Для автоматизации повторения можно сделать это:

#!/usr/bin/expect

spawn ./offset_fitm_exp

set range   1.6
set azimuth 1.0

while {true} {
    expect "enter minimum cross-correlation threshold:"
    send "0.15\r" 

    expect "enter the range and azimuth error thresholds:" 
    send "$range $azimuth\r"

    expect -re {range: ([0-9.]+)   azimuth: ([0-9.]+} {
        set range   $expect_out(1,string)
        set azimuth $expect_out(2,string)
    }

    expect "set new error bounds? (0: no, 1: yes):" { 
        if {$range > 0.02 || $azimuth > 0.02} {
            send "1\r"
        } else {
            send "0\r" 
            break
        }
    }
}

interact
0
ответ дан 29 September 2019 в 13:01

Хорошо, я думаю, но я мог начать действовать и забыть, или прослеженная сторона. таким образом, можно попытаться обработать строки вывода как строки, которые исправили столбцы (надо надеяться, который имеет место) для соответствия, и установите вывод, Вы могли сделать:

set A1 [lrange $expect_out(1,string) 2]
set A2 [lrange $expect_out(1,string) 3]

затем делают что-то как:

if {$A1>=N || $A2>=N} do something (like change the set a1,a2 values, or ....

Иллинойс перепроверяют позже.

0
ответ дан 29 September 2019 в 13:01

Другие вопросы по тегам:

Похожие вопросы: