Expect прекрасно работает в интерактивном режиме, но не из файла - PullRequest
0 голосов
/ 19 сентября 2010

Это прекрасно работает, когда я использую ожидаемо в интерактивном режиме, как это:

root@vagrantup:/home/vagrant> expect -i
expect1.1> spawn screen -x
spawn screen -x
3195
expect1.2> send "ls\n"
expect1.3> exit

Но те же команды, которые используются в файле:

spawn screen -x
send "ls\n"
exit

Работает только иногда, например. 1/10 раз каждый раз, когда я выполняю файл. Это действительно странно.

Я выполняю файл с этой командой:

expect -f Expectfile

Я также проверил это:

expect -b Expectfile
expect Expectfile

Но я получаю ту же ошибку.

Это ничего не говорит. Другой экран (так как я использую команду "screen") отвечает только когда-нибудь. Кто-нибудь знает почему?

Ответы [ 2 ]

4 голосов
/ 20 сентября 2010

Я надеюсь, что вы используете ls, чтобы заменить что-то еще, потому что, если вы просто хотите получить локальный список файлов, вам лучше использовать команду glob.Конечно, вы могли бы на самом деле делать что-то подобное, например, с использованием screen -x, но мне сейчас кажется, что я немного слишком сложен.

Возможные сбои (хотя яСъемка в темноте из-за отсутствия доказательств) может быть взаимодействием между различными вещами, использующими виртуальные терминалы (это ожидают и экран, а виртуальных терминалов не так много в масштабе всей системы), или какой-то проблемой синхронизации из-зане достаточно времени для восстановления соединения с сеансом.(Сбой 9 раз из 10? Это очень много.) Если это проблема синхронизации, вставка after 500 поможет.Если это количество терминалов, у вас есть проблемы;может быть, это можно было бы обнаружить с помощью такого инструмента, как lsof, но есть много движущихся частей, и я не знаю, что выходит из строя.

1 голос
/ 19 сентября 2010

Почему?Потому что вы неправильно используете Expect.

Я не уверен, что поток стекового потока является эффективным средством для обучения тому, чего вам не хватает в Expect.Лучшей отправной точкой, вероятно, будет следующее: почему, по вашему мнению, вы должны использовать Expect?Для автоматизации экрана, когда вы пытаетесь, вам лучше использовать ядро ​​Tcl, а не расширение Expect от Tcl.

screen - это здорово, Expect - это здорово, и я всегда поддерживаю автоматизацию.Конкретная комбинация, которую вы представили, звучит сложнее, чем это может быть оправдано.

...