आम तौर पर, मैं stdout पुनर्निर्देशन कि डोनल अध्येताओं his answer में पता चलता है की सलाह देते हैं।
कभी कभी यह संभव नहीं हो सकता। हो सकता है कि टीसीएल दुभाषिया को एक जटिल अनुप्रयोग में जोड़ा गया हो, जिसमें खुद को एक फैंसी विचार है जहां आउटपुट जाना चाहिए, और तब आप नहीं जानते कि स्टडआउट चैनल को कैसे पुनर्स्थापित करना है।
उन मामलों आप
puts
आदेश को फिर से परिभाषित करने की कोशिश कर सकते हैं
। यहां एक कोड उदाहरण दिया गया है कि आप इसे कैसे कर सकते हैं। सादा टीसीएल में, renaming द्वारा इसे एक सुरक्षित नाम में एक कमांड को फिर से परिभाषित किया जा सकता है, और एक रैपर प्रो बनाना जो सुरक्षित आदेश पर मूल कमांड को कॉल करता है - या बिल्कुल नहीं, आपकी इच्छित कार्यक्षमता के आधार पर।
proc redirect_file {filename cmd} {
rename puts ::tcl::orig::puts
set mode w
set destination [open $filename $mode]
proc puts args "
uplevel \"::tcl::orig::puts $destination \$args\"; return
"
uplevel $cmd
close $destination
rename puts {}
rename ::tcl::orig::puts puts
}
तुम भी एक चर में पाठ अनुप्रेषित कर सकते हैं:
proc redirect_variable {varname cmd} {
rename puts ::tcl::orig::puts
global __puts_redirect
set __puts_redirect {}
proc puts args {
global __puts_redirect
set __puts_redirect [concat $__puts_redirect [lindex $args end]]
set args [lreplace $args end end]
if {[lsearch -regexp $args {^-nonewline}]<0} {
set __puts_redirect "$__puts_redirect\n"
}
return
}
uplevel $cmd
upvar $varname destination
set destination $__puts_redirect
unset __puts_redirect
rename puts {}
rename ::tcl::orig::puts puts
}
Tcl'ers विकी और अधिक जटिल अनुप्रयोगों में एक और interesting example of redefining puts
है। शायद यह भी प्रेरणादायक है।