首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从tclsh调用bash内置

从tclsh调用bash内置
EN

Stack Overflow用户
提问于 2012-01-04 21:42:45
回答 1查看 409关注 0票数 3

我有一个tclsh脚本,我需要在后台执行某些命令。我可以在tcl中使用exec命令:exec myprog &来实现这一点。

但是我怎么能等待tcl中的myprog完成呢?命令wait不是一个独立的实用程序,所以我可以在exec中使用它。wait命令是一个内置的shell。请告诉我如何在tclsh脚本中等待后台进程。

PS:我在我的脚本中使用了#!/usr/bin/env tclsh shebang。

EN

回答 1

Stack Overflow用户

发布于 2012-01-04 22:23:05

如果你想在Tcl的后台执行一个命令,你可以使用下面这行代码:

代码语言:javascript
复制
proc cb { fd } {
        gets $fd buf
        append ::output $buf
        if {[eof $fd]} {
            close $fd
            set ::finished 1
        }
}

set command "<command to execute>"
set ::output ""
set ::finished 0
set fd [open "|$command" r]
fconfigure $fd -blocking no
fileevent $fd readable "cb $fd"
vwait ::finished
puts $::output

在命令前使用带有|open将允许您“打开”指向命令的管道。使用fconfigure将其设置为非阻塞将允许您读取它,而无需锁定脚本中的任何其他进程。每当有数据需要读取时,fileevent都会调用指定的回调proc (在本例中是cb) (因此是readable标志)。vwait将确保脚本在写入指定变量之前不会继续,因此$command将在后台执行,从而允许Tk接口保持响应并等待,直到您想要继续。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8727876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档