Труба командная ТСЛ - PullRequest
       4

Труба командная ТСЛ

0 голосов
/ 29 апреля 2018

На эту тему говорили много раз, и есть много примеров на SO и вики, но я не понимаю, что происходит ... в моем случае. Если я использую exec {*}$mycmd &, мои строки отображаются в реальном времени на моей консоли, и это то, что я хочу, но я их не ловлю, поэтому я выбрал другой подход и использовал open |$mycmd r, но мои строки отображаются на конец команды.

% set mycmd [list $exe $journal -args {*}$args 2>c:/temp/error.txt]
% exec {*}$mycmd &
my line display in real time
my line display in real time
my line display in real time
...
...
...
%

мой код с pipeline: Fileevent пример

set in [open |$mycmd r]
fconfigure $in -blocking 0
fileevent $in readable [list handleFileEvent $in]
vwait ::forever

proc closePipe {f} {
    fconfigure $f -blocking true
    if {[catch {close $f} err]} {
        puts stderr $err
        set ::forever 1
    } else {
    set ::forever 1
    }
    }

proc handleFileEvent {f} {
    set status [catch { gets $f line } result]
    if { $status != 0 } {
        puts stderr $result
        closePipe $f
    } elseif { $result >= 0 } {
        puts stdout $line
    } elseif { [eof $f] } {
        closePipe $f
    } elseif { [fblocked $f] } {
        puts stdout $line
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...