2016-06-15 10 views

Antwort

0

Variablen sind standardmäßig an einen Interpreter gebunden, mit Ausnahme des globalen Arrays env, das einem globalen Prozess zugeordnet ist, der von der C-Laufzeit verwaltet wird (und der wirklich langsam ist).

Aber andere Optionen sind möglich. Beispielsweise können Sie die API thread-shared-variable im Thread-Paket verwenden, um eine Variable zu haben, die von allen Threads in einem Prozess gemeinsam genutzt wird. Die Abbildung ist nicht auf eine echte Variable standardmäßig, wenn auch (für einfache Anwendungsfälle nur) Sie die Zuordnung über einige variable Spuren machen können:

package require Thread 

# The lambdas do some adaptation of arguments in traces 
trace add variable foo write {apply {args { 
    global foo 
    tsv::set share Foo $foo 
}}} 
trace add variable foo read {apply {args { 
    global foo 
    set foo [tsv::get share Foo] 
}}} 
trace add variable foo unset {apply {args { 
    tsv::unset share Foo 
}}} 

Wenn Sie zwischen Prozessen gemeinsam nutzen möchten (oder zwischen den Systemen), die Dinge werden ein bisschen komplizierter. Ich würde vorschlagen, das System Tequila zu betrachten, wenn das noch am Leben ist. Ich weiß nicht, was die Sicherheitskonsequenzen sind, obwohl ein Server, der nur localhost ausgesetzt ist, zu viel von einem Problem die meiste Zeit ist.

0
  • Methode # 1

Original-Skript:

$ cat bar.tcl 
set script_name $argv0 
set var1 [lindex $argv 0] 
set var2 [lindex $argv 1] 
puts "$script_name: var1=$var1, var2=$var2" 
$ 

Ausführung Ausgabe:

$ tclsh bar.tcl 10 20 
bar.tcl: var1=10, var2=20 
$ 

Wrapper-Skript:

$ cat foo.tcl 
set file_name bar.tcl 
set argv0 $file_name 
set argv [list 100 200] 
puts "Invoking $file_name" 
source $file_name 
$ 

Ausführungs output:

$ tclsh foo.tcl 
Invoking bar.tcl 
bar.tcl: var1=100, var2=200 
$ 
  • Methode # 2

Wrapper-Skript:

$ cat bat.tcl 
set file_name bar.tcl 
puts "Invoking $file_name" 
puts [exec tclsh $file_name 500 600] 
$ 

Ausführungs output:

$ tclsh bat.tcl 
Invoking bar.tcl 
bar.tcl: var1=500, var2=600 
$