Tcl Expect spawn-打开发送用户-两种不同的行为

Tcl Expect spawn-打开发送用户-两种不同的行为,tcl,expect,Tcl,Expect,很长一段时间后,我又回到了Tcl/Expect。对于defaultspawn\u id和explicit,Expect的行为似乎不一样。看来不是这样的 我正在Ubuntu上使用Expect 5.45。在输入文件input/input.found.txt上,如下所示: ~$ more input/input.found.txt hello World! hello <intentional blank new line> 我希望这两种情况的输出是相同的,但它们不是。我得到的结果是:

很长一段时间后,我又回到了Tcl/Expect。对于default
spawn\u id
和explicit,Expect的行为似乎不一样。看来不是这样的

我正在Ubuntu上使用Expect 5.45。在输入文件
input/input.found.txt
上,如下所示:

~$ more input/input.found.txt
hello
World!
hello
<intentional blank new line>
我希望这两种情况的输出是相同的,但它们不是。我得到的结果是:

---
spawn [open ...]
hello
World!
hello

---
spawn [open ...]
hello
World!
hello

found
--- 
(请注意,在第一种情况下,找不到


我关于产出的假设哪里错了?为什么通过
-i
(至少在文件处理情况下)明确指定
spawn\u id
来改变
发送用户
放置
的行为?

您的第一个expect命令不是您所想的。expect命令将采用单独的参数,或一个参数列表

第一个expect命令有3个参数,因此它将-i$file作为一个选项,指定spawn id,最后一个参数作为一个没有任何主体的模式。该多行模式与文件内容不匹配。但即使它这样做了,也不会打印任何内容,因为没有适合该图案的主体

第二个expect命令的所有参数都在大括号内。expect命令然后将该列表扩展为8个参数

程序最简单的修复方法是将-i$file1放在大括号内,如下所示:

expect {
    -i $file1
    -re ".ello" {
        send_user "found\r\n"; # should print BUT doesn't print
    }
    -re ".orld" {
        send_user "found the world!\r\n"; # shouldn't print, doesn't print
    }
    eof { puts "not found" }
}

您的第一个expect命令不是您所想的。expect命令将采用单独的参数,或一个参数列表

第一个expect命令有3个参数,因此它将-i$file作为一个选项,指定spawn id,最后一个参数作为一个没有任何主体的模式。该多行模式与文件内容不匹配。但即使它这样做了,也不会打印任何内容,因为没有适合该图案的主体

第二个expect命令的所有参数都在大括号内。expect命令然后将该列表扩展为8个参数

程序最简单的修复方法是将-i$file1放在大括号内,如下所示:

expect {
    -i $file1
    -re ".ello" {
        send_user "found\r\n"; # should print BUT doesn't print
    }
    -re ".orld" {
        send_user "found the world!\r\n"; # shouldn't print, doesn't print
    }
    eof { puts "not found" }
}

您是否已尝试在启用详细调试的情况下运行expect?听说这会有很大帮助。您是否尝试过在启用详细调试的情况下运行expect?我听说这会有很大帮助。