2013-12-09 1 views
2

По сложным причинам я должен угнать рутину «puts». Я хотел бы делать разные вещи, основываясь на том, что «поток» являетсяTCL ставит поток: могу ли я узнать, что такое поток? стандартный вывод? STDERR? файл?

proc myPuts { stream msg } { 

     if < stream is stdout > 
      .... 
     elseif < stream is stderr > 
      ... 
     else 
      ... 

} 

Есть ли способ узнать, если поток аргумент стандартный вывод, STDERR или файл внутри TCL?

Спасибо,

ответ

1

Насколько мне известно, поток STDOUT в Tcl является "стандартный вывод", и STDERR является "STDERR". Если вы делаете puts $stream "string" с $ stream, имеющим значение «stdout», он переходит к stdout; аналогично stderr.

Обычный вызов puts рассматривает аргумент потока как необязательный; ваши myPuts должны будут сделать то же самое и обработать отсутствующий операнд как stdout. Кроме того, я считаю, что это просто вопрос

if {$stream eq "stdout"} { 
    # do your stdout thing 
} elseif {$stream eq "stderr"} { 
    # do your stderr thing 
} else { 
    # do your file handle thing 
} 
+2

Для сравнения строк используйте 'eq' вместо' '== - http://tcl.tk/man/tcl8.5/TclCmd/expr. htm # M14 –

+0

Это прекрасный полицейский, отредактированный, чтобы отразить вашу точку зрения. –

Смежные вопросы