我有一个用tcl编写的工具,我想用Python脚本。 File1.tcl将调用file2.py,它将调用file3.tcl。
中的procedure_aFile1.tcl
set names(1) Jane
set names(2) Tom
set names(3) Elisabeth
set names(4) Robert
set names(5) Julia
set names(6) Victoria
set output [exec /home/Python-2.7.6/./python /home/usr1/tests/ file2.py [array get names]]
file2.py
from Tkinter import Tcl
tcl = Tcl()
tcl.eval('source /home/mbenabu/vtf/procs/Linux/file3.tcl')
tcl.eval('proc1 {%s} ' % [sys.argv[1]])
file3.tcl
proc proc1 (array)
// do something with the array.
问题: 当我从py脚本调用proc1时,proc1中收到的'array'是一个字符串而不是数组,因此从py脚本调用' proc1'失败。
如何将数组发送到proc1?
答案 0 :(得分:0)
发送数组很棘手 - 在Tcl中,它们是变量而不是值的集合,这是一个非常重要的区别,因为变量不是一等实体 - 但你可以发送一个数组的序列化并重新构建它,这适用于发送值。
要序列化数组,请使用array get
返回字典值。您的代码示例已经执行此操作。反向操作是array set
,它进入被调用的过程:
proc proc1 {dictionary} {
array set ary $dictionary
# Now we have a copy of the array and can do what we want to it
puts "ary(1) is $ary(1)"
}
如果你在同一个Tcl解释器中运行,你可以有其他选择,比如拥有一个共享的全局数组。或者您可以使用类似Tequila之类的东西来创建共享数组服务,但是如果您走这条路线会有一些很多警告(我不会亲自去做)。