我創建了一個執行緒:
set t1 [thread::create]
thread::send $t1 {
proc myProc {command args} {
exec {*}[auto_execok $command] {*}$args >& /dev/null
}
}
然后嘗試發送異步命令:
thread::send -async $t1 [list myProc <command args>]
但是命令的錯誤/輸出顯示在輸出中。如何隱藏發送到異步執行緒的命令中的錯誤/輸出?
uj5u.com熱心網友回復:
最簡單的方法是catch錯誤。
thread::send $t1 {
proc myProc {command args} {
catch {
exec {*}[auto_execok $command] {*}$args >& /dev/null
}
}
}
請注意,這會使任何問題的除錯變得更加困難!如果您能識別出您期望的錯誤并try捕獲它們,那就更好了,因此意外錯誤仍然是您看到并必須處理的事情。
thread::send $t1 {
proc myProc {command args} {
try {
exec {*}[auto_execok $command] {*}$args >& /dev/null
} trap CHILDSTATUS {} {
# Ignore a non-zero exit?
}
}
}
對于這種特定情況(從 Tcl 的角度來看,這是非常受 I/O 限制的),您最好只添加&到exec呼叫的末尾而不是在單獨的執行緒中運行。如果不確切知道您在做什么,就無法確定,但值得考慮。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/436151.html
