TCL:使用来自同一文件的新进程运行proc

TCL:使用来自同一文件的新进程运行proc,tcl,exec,proc,Tcl,Exec,Proc,我正在尝试使用新进程运行proc 我试图从main函数中调用proc1和proc2,但它们都应该与一个新进程(或子进程)分开运行,并等待它完成 proc main { var } { puts "main function with var: $var" #call proc1 with new process exec proc1 1 #wait till proc1 finish #call proc2

我正在尝试使用新进程运行proc 我试图从main函数中调用proc1和proc2,但它们都应该与一个新进程(或子进程)分开运行,并等待它完成

    proc main { var } {
        puts "main function with var: $var"
        #call proc1 with new process
        exec proc1 1
        #wait till proc1 finish
        #call proc2 with new process
        exec proc2 2
        #wait till proc2 finish
        puts "Finished"
    }

    proc proc1 { var1 } {
        puts "proc1 function with var: $var1"
    }

    proc proc2 { var2 } {
        puts "proc2 function with var: $var2"
    }
我试着使用exec,但没有成功 我试着用谷歌搜索,但没有找到解决办法

我怎样才能让它运行


非常感谢

最简单的机制是将过程放在一个单独的文件中(例如,
myprocs.tcl
),文件末尾有以下一位额外的代码:

# Take a command from stdin, evaluate it, and write result to stdout
puts [eval [read stdin]]
然后使用以下帮助程序调用这些过程:

proc runproc {procname args} {
    exec [info nameofexecutable] myprocs.tcl << [list $procname {*}$args] 2>@stderr
}

# Demonstrating
set result [runproc proc1 1]
主叫方:

proc runproc {procname args} {
    set cmd [list $procname {*}$args]
    set pair [exec [info nameofexecutable] myprocs.tcl << $cmd 2>@stderr]
    lassign $pair msg opts
    return -options $opts $msg
}
proc runproc{procname args}{
set cmd[list$procname{*}$args]
设置对[exec[info nameofexecutable]myprocs.tcl@stderr]
lassign$pair msg opts
返回-选项$opts$msg
}

同时传输正常的
stdout
,或允许子进程访问调用者的
stdin
,需要再次进行更多工作才能将命令和控制通道移动到标准管道以外的位置,上面的内容对于很多事情来说已经足够了。

最简单的机制是将过程放在一个单独的文件(例如,
myprocs.tcl
)中,在文件末尾添加以下额外代码:

# Take a command from stdin, evaluate it, and write result to stdout
puts [eval [read stdin]]
然后使用以下帮助程序调用这些过程:

proc runproc {procname args} {
    exec [info nameofexecutable] myprocs.tcl << [list $procname {*}$args] 2>@stderr
}

# Demonstrating
set result [runproc proc1 1]
主叫方:

proc runproc {procname args} {
    set cmd [list $procname {*}$args]
    set pair [exec [info nameofexecutable] myprocs.tcl << $cmd 2>@stderr]
    lassign $pair msg opts
    return -options $opts $msg
}
proc runproc{procname args}{
set cmd[list$procname{*}$args]
设置对[exec[info nameofexecutable]myprocs.tcl@stderr]
lassign$pair msg opts
返回-选项$opts$msg
}

同时传输正常的
stdout
,或允许子进程访问调用者的
stdin
,需要再次进行更多的工作,才能将命令和控制通道移动到标准管道以外的位置,而上述方法对于很多事情来说已经足够了。

如果需要单独的进程,然后将这些进程保存在单独的文件中,并使用
tclsh
process调用它们考虑为此使用线程。它们更易于使用。如果您想要单独的进程,请将这些进程保存在单独的文件中,并使用
tclsh
process调用它们考虑为此使用线程。它们更容易使用。