Всякий раз, когда вы используете команды пакета Expect в процедуре, вам нужно позаботиться о способе доступа к переменным. В частности, вам, вероятно, нужно будет сказать по крайней мере:
global spawn_id
в каждой из этих процедур. Возможно, вот так:
proc ::tutstack::parse {city} {
global spawn_id
puts "getting weather for $city"
expect -nocase "Press Return to continue:"
# You *might* need inter_return instead of return; the documentation isn't clear
interact "\004" return
}
proc ::tutstack::connect {city} {
global spawn_id
spawn telnet rainmaker.wunderground.com
set telnet $spawn_id
parse $city
}
Однако вам, вероятно, лучше сохранить идентификатор спауна (т.е. результат вызова spawn
) в переменной пространства имен и явно передать его в соответствующие команды через -i
флаг, например:
proc ::tutstack::connect {city} {
variable telnet [spawn telnet rainmaker.wunderground.com]
parse $city
}
proc ::tutstack::parse {city} {
variable telnet
puts "getting weather for $city"
expect -i $telnet -nocase "Press Return to continue:"
# You *might* need inter_return instead of return; the documentation isn't clear
interact -i $telnet "\004" return
}