在后台运行shell命令,在tcl proc中

时间:2012-12-16 17:29:08

标签: background tcl proc

我正在尝试创建一个tcl proc,它将shell命令作为参数传递,然后打开一个临时文件并将格式化的字符串写入临时文件,然后在后台运行shell命令并将输出存储到临时文件也是如此。

在后台运行命令,以便之后可以立即调用proc 与另一个arg传递给它,写入另一个文件。因此,运行一百个这样的命令不应该花费很长时间来连续运行它们。多个临时文件最终可以连接成一个文件。

这是我正在尝试做的伪代码。

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。

1 个答案:

答案 0 :(得分: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 &