从python脚本调用tcl组件并返回到tcl

时间:2015-02-23 14:47:11

标签: python tcl

我有一个用tcl编写的工具,我想用Python脚本。 File1.tcl将调用file2.py,它将调用file3.tcl。

中的procedure_a

File1.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?

1 个答案:

答案 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之类的东西来创建共享数组服务,但是如果您走这条路线会有一些很多警告(我不会亲自去做)。