2

シェルコマンドを引数として渡され、一時ファイルを開き、フォーマットされた文字列を一時ファイルに書き込み、続いてシェルコマンドをバックグラウンドで実行し、出力を一時ファイルに保存する tcl proc を作成しようとしています。同じように。

コマンドをバックグラウンドで実行すると、その直後に proc を呼び出して、別の引数を渡して別のファイルに書き込むことができます。したがって、そのようなコマンドを 100 回実行しても、それらを連続して実行する場合ほど長くはかからないはずです。複数の一時ファイルを最終的に 1 つのファイルに連結できます。

これは、私がやろうとしていることの疑似コードです。

proc runthis { args }  
{ 
    set date_str [ exec date {+%Y%m%d-%H%M%S} ]
    set tempFile ${date_str}.txt
    set output [ open $tempFile a+ ]
    set command [concat exec $args]
    puts $output "### Running $args ... ###"   

    << Run the command in background and store output to tempFile >>
}

しかし、タスクのバックグラウンド化が適切に行われるようにするにはどうすればよいですか? 複数の一時ファイルが適切に閉じられるようにするには、何をする必要がありますか?

どんな助けでも大歓迎です。私は tcl が初めてで、これを回避する方法を見つけました。Tcl でのスレッドの使用について読みましたが、スレッド化をサポートしていない古いバージョンの Tcl を使用しています。

4

1 に答える 1

1

どうですか:

proc runthis { args }  { 
    set date_str [clock format [clock seconds] -format {+%Y%m%d-%H%M%S}]
    set tempFile ${date_str}.txt
    set output [ open $tempFile a+ ]
    puts $output "### Running $args ... ###"   
    close $output

    exec {*}$args >> $tempFile &
}

http://tcl.tk/man/tcl8.5/TclCmd/exec.htmを参照してください。

古い Tcl を使用しているようですので、交換してください。

    exec {*}$args >> $tempFile &

    eval exec [linsert $args 0 exec] >> $tempFile &
于 2012-12-17T11:54:08.810 に答える