2015-03-01 2 views
0

У меня есть скрипт, который регистрируется на устройствах и запускает команду show. Затем я этот вывод переменной:TCL-скрипт сохраняет только нижнюю половину вывода

set output $expect_out(buffer) 

, а затем распечатать переменную в файл:

puts $fileId $output 

Когда скрипт запускается, я могу увидеть весь выход генерируется, однако в файл, сохраняется только нижняя половина вывода.

Возможно, это связано с тем, что буфер достигает своего предела. Эта команда show работает сразу после другой длинной команды show.

Я пробовал использовать unset expect_out(buffer), но это все еще не имеет значения.

Я также пробовал это решение http://wiki.tcl.tk/2958 и он все еще не работал (возвращает ошибку) Как я могу получить скрипт для хранения всего вывода?

ответ

1

я вижу на странице ожидать человека, что шаблон full_buffer будет соответствовать, когда размер буфера достигает match_max байт, так что вы можете сделать что-то вроде:

match_max 16000 
# ... 
expect { 
    full_buffer { 
     puts $fileid $expect_out(buffer) 
     exp_continue 
    } 
    "whatever you are currently expecting" 
} 
puts $fileid $expect_out(buffer) 
+0

Это рискованно, так как я не уверен, насколько большой выход может быть. Это будет зависеть от устройства. Есть ли способ динамически распределять максимальный уровень буферизации в зависимости от результата? – user2883071

+0

Имеет ли ваш компьютер меньше 16 КБ памяти? Мой код должен записывать файл в 16kb фрагментах –

0

Вы также можете воспользоваться log_file для Сделай это проще. Вы можете контролировать, когда сохранять и когда прекращать ведение журнала.

Посмотрите на here, чтобы узнать о том же.

+0

Когда я это делаю, он работает, но только для первой команды. Есть ли проблема с открытием файла журнала, его закрытием и открытием другого другого файла журнала? похоже, что после создания первого файла log_file сценарий заканчивается – user2883071

+0

Надеюсь, вы задали новый вопрос об этом в http://stackoverflow.com/q/28796121/974155. Позвольте мне проверить его там. – Dinesh