从Python访问Tcl函数的示例

时间:2010-03-25 21:27:35

标签: python tcl

elmer允许用户从Tcl运行Python代码。反过来呢?有谁可以在Python中举个例子?

更新:我的意思是,能够访问Tcl对象,调用Tcl函数等,而不是只是运行一些Tcl代码。

4 个答案:

答案 0 :(得分:7)

这是一个相当古老的线程,但我最近偶然发现了Tkinter.Tcl(),这使您可以直接访问python 中的Tcl解释器,而不必像Tkinter.Tk()那样生成Tk GUI

一个例子......假设你有一个Tcl文件(foo.tcl),其中一个名为main的proc需要一个文件名作为参数... main返回一个派生的字符串阅读foo.tcl

from Tkinter import Tcl

MYFILE = 'bar.txt'
tcl = Tcl()
# Execute proc main from foo.tcl with MYFILE as the arg
tcl.eval('source foo.tcl')
tcl_str = tcl.eval('main %s' % MYFILE)
# Access the contents of a Tcl variable, $tclVar from python
tcl.eval('set tclVar foobarme')
tclVar = tcl.eval('return $tclVar')

除了通过返回值,我还没有找到另一种从python访问Tcl对象的方法,但这确实为你提供了一种与Tcl procs接口的方法。此外,您可以按照Using Python functions in Tkinter.Tcl()

中的讨论将python函数导出到Tcl中

答案 1 :(得分:4)

你可以看看python tkinter标准模块,它是一个绑定到Tk UI,但它在后台执行Tcl代码。

答案 2 :(得分:1)

虽然理论上可以通过提供一些透明地包装C级Tcl_Obj *的自定义Python对象类型来实现,但一般情况下只是来回交换字符串,因为Tcl的EIAS语义可以自由地闪烁其他所有内部表示。

所以是的,你可以比字符串更好,但它通常不值得。 Tkinter已经内置了一些可能的优化,所以试着偷走那里......

答案 3 :(得分:-3)

此?

import subprocess
subprocess.Popen( "tclsh someFile.tcl", shell=True )