2015-06-03 85 views
2

我對TCL非常新,但是我正在編寫一個腳本,它將搜索測試用例的文件並篩選出具有特定關鍵字的文件,並使用exec運行這些測試。它運行的第一次測試正常,但一旦完成,它開始再次運行相同的測試,並立即失敗,導致我的腳本結束。這是劇本的樣子運行測試在TCL中執行測試

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 

運行throught測試正常,但之後我得到這個消息

<<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) 

回答

1

exec命令認爲這是一個失敗,如果被調用命令的輸出任何東西標準錯誤,即使它有一個成功的退出狀態:

如果有任何的命令寫入其標準錯誤文件和標準錯誤不是重定向和-ignorestderr我沒有指定,那麼exec將返回一個錯誤;

你想使用-ignorestderr選項。

set runtests [exec -ignorestderr bsub ... 
+0

謝謝你這正是我所需要做的!這似乎很簡單,我不知道我是怎麼錯過它的...... –

+0

當程序都堅持寫出非錯誤的東西給stderr,而不是一致地返回一個非零的退出代碼時,唯一真正可怕的問題發生。那時候你必須做一些令人討厭的事情,比如把所有東西都讀入字符串並用正則表達式解析。可怕。值得報告的錯誤,以這種方式工作的程序創建者(如果你認爲他們會聽...) –