在TCL中执行测试

在TCL中执行测试,tcl,Tcl,我对TCL非常陌生,但我正在编写一个脚本,它将搜索一个文件中的测试用例,过滤出带有特定关键字的测试用例,并使用exec运行这些测试。它可以很好地运行第一个测试,但一旦完成,它就开始再次运行同一个测试,并立即失败,导致脚本结束。这就是运行测试的脚本的外观 exec make clean exec make depends set runtests [exec bsub -I -q lin_i make test_run_test_here SEED=1 VPDDUMP=on] set test [

我对TCL非常陌生,但我正在编写一个脚本,它将搜索一个文件中的测试用例,过滤出带有特定关键字的测试用例,并使用
exec
运行这些测试。它可以很好地运行第一个测试,但一旦完成,它就开始再次运行同一个测试,并立即失败,导致脚本结束。这就是运行测试的脚本的外观

exec make clean
exec make depends
set runtests [exec bsub -I -q lin_i make test_run_test_here SEED=1 VPDDUMP=on]
set test [lsearch -all -inline $runtest "TEST COMPLETED SUCCESSFULLY: test_run_test_here"]
puts $test
它在测试中运行良好,但在我收到此消息后

<<Waiting for dispatch ...>>
<<Starting on testserver01>>
    while executing
"exec bsub -I -q lin_i make test_run_test_here SEED=1 VPDDUMP=on"
    invoked from within
"set runtests [exec bsub -I -q lin_i make test_run_test_here SEED=1 VPDDUMP=on]"
    (file "./test.tcl" line 71)

执行时
“exec bsub-I-q lin\u我使测试运行\u测试\u这里SEED=1 VPDDUMP=on”
从内部调用
“设置运行测试[exec bsub-I-q lin\u I make test\u run\u test\u here SEED=1 VPDDUMP=on]”
(文件“/test.tcl”第71行)

如果被调用的命令向stderr输出任何内容,则
exec
命令将其视为失败,即使它具有成功的退出状态:

如果任何命令写入其标准错误文件,且该标准错误未重定向且未指定-Ignoresterr,则exec将返回错误

您想使用
-ignoresterr
选项

set runtests [exec -ignorestderr bsub ...

谢谢你,这正是我所需要的!它看起来很简单,我不知道我怎么会错过它…唯一真正可怕的问题是,当程序都坚持向stderr写入无错误的内容,而不一致地在出错时返回非零退出代码时。这时你必须做一些讨厌的事情,比如把所有东西读入一个字符串,然后用regexps解析它。极坏的值得作为一个bug报告给这样工作的程序的创建者(如果你认为他们会听的话…)