Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcl 如何在使用expect';发送';命令_Tcl_Output_Send_Expect - Fatal编程技术网

Tcl 如何在使用expect';发送';命令

Tcl 如何在使用expect';发送';命令,tcl,output,send,expect,Tcl,Output,Send,Expect,谢谢 但是需要帐户和密码。所以我必须发送它们,然后发送ovs vsctl命令 脚本如下所示: spawn telnet@ip expect -re "*login*" { send "root" } expect -re "password*" { send "****" } send "ovs-vsctl *******" 我想存储这个命令的输出send“ovs vsctl****”,但是很多时候我得到了命令“send”password“”的一些输出,我如

谢谢

但是需要帐户和密码。所以我必须发送它们,然后发送ovs vsctl命令

脚本如下所示:

spawn telnet@ip 

expect -re "*login*" {
       send "root"
}

expect -re "password*" {
       send "****"
}

send "ovs-vsctl *******"
我想存储这个命令的输出
send“ovs vsctl****”
,但是很多时候我得到了命令“send”password“”的一些输出,我如何才能得到
send“ovs vsctl****”
的输出呢。命令的输出是两个字符串,每个字符串占用一行

谢谢。

也许:

log_user 0                   ;# turn off the usual output
spawn telnet@ip 
expect -re "*login*"
send "root\r"
expect -re "password*"
send "****\r"
send "ovs-vsctl *******"
expect eof
puts $expect_out(buffer)     ;# print the results of the command

Expect与一个输入缓冲区一起工作,该缓冲区包含从交互应用程序返回的所有内容,这意味着进程输出和您的输入(只要它是从远程设备回显的,通常就是这样)

expect
命令用于从输入缓冲区恢复文本。每次找到匹配项时,清除该匹配项结束前的缓冲区,并将其保存到$expect\u out(缓冲区)。实际匹配项保存到$expect\u out(0,字符串)。然后,缓冲区重置

在您的案例中,需要做的是将输出与
expect
语句匹配,以获得您想要的结果

在您的情况下,我要做的是在发送密码后匹配远程设备提示,然后在发送命令后再次匹配。这样,上次匹配后的缓冲区将保存所需的输出

大致如下:

[...]
expect -re "password*" {
       send "****"
}

expect -re ">"

send "ovs-vsctl *******\r"

expect -re ">"  # Better if you can use a regexp based on your knowledge of device output here - see below

puts $expect_out(buffer)
通过基于您对输出的了解使用regexp进行匹配,您应该能够仅提取命令输出,而不是回显的命令本身。或者您也可以始终在事后使用
regexp
命令进行匹配


希望这会有帮助!

很好!我没有想过使用log\u user。这会在允许“真实”的同时停止远程回显您自己的命令吗“命令输出?我的想法是,你不能分开,但我知道什么。。。你给了我一些我现在需要尝试的东西只有当输出相对较小时,这才真正起作用。我不记得默认情况下有多少expect缓冲区,但它不是无界的。