elmer允许用户从Tcl运行Python代码。反过来呢?有谁可以在Python中举个例子?
更新:我的意思是,能够访问Tcl对象,调用Tcl函数等,而不是只是运行一些Tcl代码。
答案 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 )