首页 > 解决方案 > 期望将外部程序的退出命令识别为自己的

问题描述

我是 Expect 的新手,正在尝试制作一个测试程序。
在深入研究问题之前,以下是代码。

#!/usr/bin/env expect


if { [llength $argv] != 2 } {
    puts "expect tester.exp <executable> <test-case>"
    exit 1
}

set executable [lindex $argv 0]
set TEST [lindex $argv 1]
set test_cmds [split $TEST "\n"]

spawn ./$executable

set timeout 0.05
foreach test_cmd $test_cmds {
    expect "."
    send "$test_cmd\r"
    sleep 0.05
}

send_user "\r"
exit 0

问题是我试图测试的可执行文件本身有一个“退出”命令。
在下面的代码中,当 $test_cmd 变为“exit”时,我想它会以标准输入方式退出到可执行文件。
但是,似乎“退出”命令导致 Expect 退出,这会返回以下错误。
如果我不包含“退出”命令,则不会出现此类错误。
有没有办法只对我的可执行文件使用“退出”而不是期望?

["add" "remove" "select" "show" "clone" "import" "exit"]
 splite: exit
send: spawn id exp4 not open
    while executing
"send "$test_cmd\r""
    ("foreach" body line 3)
    invoked from within
"foreach test_cmd $test_cmds {
    expect "."
    send "$test_cmd\r"
    sleep 0.05
}"
    (file "tester.exp" line 18)

谢谢你。

标签: unit-testingtestingexecutableexpectexit

解决方案


推荐阅读