Возвращаясь из взаимодействия в ожидаемом скрипте

Я использую DAOMATCH, астрономическую программу для поиска совпадений между изображениями, и я пытаюсь полуавтоматизировать ее с помощью EXPECT.

Программа запрашивает некоторый ввод и, если это не удается, он спрашивает, хочу ли я сохранить преобразование. Вот почему я хочу полуавтоматизировать это: я хочу, чтобы он автоматически вводил данные, но когда появляется вопрос "Написать это преобразование", я хочу контролировать программу. Для этого я написал (всего начинающий с TCL) этот код

#!/usr/bin/expect -D

set timeout 1

spawn "~/myDaophot/daophot4/daomatch"
expect "*Master*"
send "060326T034700403_4.als\r"
expect "*Output*"
send "060326T002448794_2_4.mch\r"
expect "*input*" {send "060326T034700403_2.als\r"}
expect "*transformation*" {interact -o "y\r" {return}}
expect "*input*" {send "060326T034519602_4.als\r"}
expect "*transformation*" {interact -o "y\r" {return}}
expect "*input*" {send "060326T034519602_2.als\r"}
expect "*transformation*" {interact -o "y\r" {return}}
expect "*input*" {send "060326T002627552_4.als\r"}
expect "*transformation*" {interact -o "y\r" {return}}
expect "*input*" {send "060326T003255953_2.als\r"}
expect "*transformation*" {interact -o "y\r" {return}}
expect "*input*" {send "060326T003521749_2.als\r"}
#Question pops up here!!!
expect "*transformation*" {interact -o "y\r" {return}}
#-o needed, otherwise daomatch stops...
#\r needed otherwise, with "y" only, daomatch stops
expect "*input*" {send "060326T002539353_4.als\r"}
expect "*transformation*" {interact -o "y\r" {return}}
#other inputs.....

Теперь этот вопрос не появляется до тех пор, пока я не пометил его как комментарий (просто потому, что это первое из плохих изображений). Я даю, с помощью клавиатуры, y\r. DAOMATCH работает до этой команды: я знаю это, потому что в выводе я нахожу все преобразования, включая это последнее, за которое я ответил "y\r".

Тем не менее, на данный момент, это то, что происходит

 060326T003521749_2.als           -48    33   0.999   0.010  -0.010   0.999   0.95

         3    0.805    0.000    0.000    0.020    0.012
         2    2.000    2.000    0.400    0.500
 WT  0.804957092  <    2

                        Write this transformation? 

                    Next input file (default EXIT): zaamus@zaamuspc:~/Documenti/Fits/GCs/Omega_Cen$

Итак, последнее ожидание не выполнено. Я пытался изменить время ожидания, чтобы изменить возврат к inter_return, но я до сих пор не решил эту проблему.

Я знаю, что здесь есть несколько похожих вопросов, но я не могу инкапсулировать ожидаемый в взаимодействии, так как у меня есть еще 50-60 входных данных, которые нужно дать после того, который потерпит неудачу.

1 ответ

Не важно... Я нашел решение: мне пришлось добавить -c в #!/ Usr/bin/ Ожидается

#!/usr/bin/expect -c

set timeout 1

spawn "~/myDaophot/daophot4/daomatch"

expect "*Master*" {send "060326T034700403_4.als\r"}
expect "*Output*" {send "060326T002448794_2_4.mch\r"}
expect "*input*" {send "060326T034700403_2.als\r"}
expect "*transformation*" {interact -o y\r {return} n\r {return}}
expect "*input*" {send "060326T034519602_4.als\r"}
expect "*transformation*" {interact -o y\r {return} n\r {return}}
expect "*input*" {send "060326T034519602_2.als\r"}
expect "*transformation*" {interact -o y\r {return} n\r {return}}
expect "*input*" {send "060326T002627552_4.als\r"}
expect "*transformation*" {interact -o y\r {return} n\r {return}}
expect "*input*" {send "060326T003255953_2.als\r"}
expect "*transformation*" {interact -o y\r {return} n\r {return}}
expect "*input*" {send "060326T003521749_2.als\r"}
expect "*transformation*" {interact -o y\r {return} n\r {return}}
expect "*input*" {send "060326T002539353_4.als\r"}
expect "*transformation*" {interact -o y\r {return} n\r {return}}
expect "*input*" {send "060326T002627552_2.als\r"}
expect "*transformation*" {interact -o y\r {return} n\r {return}}
expect "*input*" {send "060326T002715751_4.als\r"}
expect "*transformation*" {interact -o y\r {return} n\r {return}}
expect "*input*" {send "060326T002539353_2.als\r"}
expect "*transformation*" {interact -o y\r {return} n\r {return}}
expect "*input*" {send "060326T034457403_4.als\r"}
expect "*transformation*" {interact -o y\r {return} n\r {return}}

Одно: я знаю, что у синтаксисавола очень строгий синтаксис, но взаимодействие работает только так, как я там написал. Если я попытаюсь добавить скобки, как это

interact -o {y\r {return} n\r {return}}

она не будет работать.

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