tcl 中的exec运行第三方,怎么同时打印第三方信息到stdout 。版本2
  sAAkk3Vxfaa8 2023年11月02日 41 0


假的长时间运行的程序:

proc long_job {} {
puts "long_job start"
puts "- after 1s start"
after 1000
puts "- after 1s start"
after 1000
puts "- after 1s start"
after 1000
puts "- after 1s start"
after 1000
puts "- after 1s start"
after 1000
puts "- after 2s start"
after 2000
puts "long_job end"
}

long_job

 

 

实现:

 

namespace eval my {}
proc my_jobReader {pipe} {
    if [eof $pipe] {
        if [catch {close $pipe} err] {
        puts $err
        set my::jobError "true"
        }
        set my::jobDone "true"
        return
    }
    puts [gets $pipe]
}
proc my_doJob {job} {
    set my::jobDone "false"
    set my::jobError "false"
    set pipe [open |$job]
    fileevent $pipe readable [list my_jobReader $pipe]
    vwait my::jobDone
    if {$my::jobError == "true"} {
        return -code error
    }
}


puts "general run"
catch {exec tclsh long_job.tcl} out
puts $out;
puts "general run end"

puts ""
puts ""
puts ""

puts "do my_doJob"
my_doJob {tclsh long_job.tcl}
puts "do my_doJob end"

 

 

 

运行:

tclsh t.tcl

 

可以发现,general run是运行完才打印的。

使用my_doJob可以运行同时打印。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  qE5RhQde1zxj   2023年12月12日   65   0   0 系统系统
  CiIZfyyIq65u   2023年11月30日   38   0   0 系统系统
  qE5RhQde1zxj   2023年12月12日   102   0   0 系统系统
  CiIZfyyIq65u   2023年11月30日   41   0   0 系统系统
  T2OqV3qDOzaQ   2023年12月12日   74   0   0 系统系统
  UPDXd5cjON6v   2023年12月12日   47   0   0 系统系统
  CiIZfyyIq65u   2023年11月30日   40   0   0 系统系统
  Qw9CIfGfUZoX   2023年12月02日   35   0   0 系统系统
sAAkk3Vxfaa8