Возвращаясь из взаимодействия в ожидаемом скрипте
Я использую 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}}
она не будет работать.