哪里有 远程登录 输出?
thufir@dur:~/NetBeansProjects/spawnTelnet/telnet$
thufir@dur:~/NetBeansProjects/spawnTelnet/telnet$ tclsh main.tcl
spawn telnet rainmaker.wunderground.com
getting weather for nyc
^C
thufir@dur:~/NetBeansProjects/spawnTelnet/telnet$
主。
lappend auto_path /home/thufir/NetBeansProjects/spawnTelnet/telnet/api
package require weather 1.0
tutstack::connect "nyc"
代码:
package provide weather 1.0
package require Tcl 8.5
package require Expect
namespace eval ::tutstack {
}
proc ::tutstack::parse {city} {
puts "getting weather for $city"
expect -nocase "Press Return to continue:"
#interact \004 return
interact \004 return
}
proc ::tutstack::connect {city} {
spawn telnet rainmaker.wunderground.com
set telnet $spawn_id
#interact
parse $city
}
这个可以用
thufir@dur:~/NetBeansProjects/spawnTelnet/telnet$
thufir@dur:~/NetBeansProjects/spawnTelnet/telnet$ tclsh chainedProcs.tcl
hello Alice from first
hello Alice from second
thufir@dur:~/NetBeansProjects/spawnTelnet/telnet$
thufir@dur:~/NetBeansProjects/spawnTelnet/telnet$ cat chainedProcs.tcl
lappend auto_path /home/thufir/NetBeansProjects/spawnTelnet/telnet/chained
package require chained 1.0
example::first "Alice"
thufir@dur:~/NetBeansProjects/spawnTelnet/telnet$
thufir@dur:~/NetBeansProjects/spawnTelnet/telnet$ cat chained/chained.tcl
package provide chained 1.0
namespace eval ::example {
}
proc ::example::first {foo} {
puts "hello $foo from first"
second $foo
}
proc ::example::second {bar} {
puts "hello $bar from second"
}
thufir@dur:~/NetBeansProjects/spawnTelnet/telnet$
但是... 这里没有使用telnet. 我想 "链"(?)一个序列,但用telnet,期待,交互等。
每当你在一个过程中使用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
}
然而,你可能最好保留产卵ID (即,调用的结果是) 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
}