Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python访问Tcl函数的示例_Python_Tcl - Fatal编程技术网

从Python访问Tcl函数的示例

从Python访问Tcl函数的示例,python,tcl,Python,Tcl,允许从Tcl运行Python代码。反过来呢?有人能举一个Python的例子吗 更新:我的意思是,能够访问Tcl对象、调用Tcl函数等,而不是简单地运行一些Tcl代码。您可以看看python tkinter标准模块,它是对Tk UI的绑定,但在后台执行Tcl代码。这是什么 import subprocess subprocess.Popen( "tclsh someFile.tcl", shell=True ) 虽然从理论上讲,通过提供一些透明地包装C级Tcl_Obj*的自定义Python对象类

允许从Tcl运行Python代码。反过来呢?有人能举一个Python的例子吗


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

您可以看看python tkinter标准模块,它是对Tk UI的绑定,但在后台执行Tcl代码。

这是什么

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

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


所以,是的,你可以做得比弦乐更好,但它通常不值得。Tkinter已经内置了一些可能的优化功能,所以请尝试从中窃取…

这是一个相当古老的线程,但我最近偶然发现了
Tkinter.Tcl()
,它可以让您直接访问python中的Tcl解释器,而不必按照
Tkinter.Tk()
的要求生成TkGUI

一个例子。。。假设您有一个Tcl文件(
foo.Tcl
),其中包含一个名为
main
的过程,该过程需要一个文件名作为参数
main
返回从读取
foo.tcl
派生的字符串

从Tkinter导入Tcl
MYFILE='bar.txt'
tcl=tcl()
#从foo.tcl执行proc main,并将MYFILE作为参数
eval('sourcefoo.tcl')
tcl_str=tcl.eval('main%s'%MYFILE]
#从python访问Tcl变量$tclVar的内容
eval('set tclVar foobarme')
tclVar=tcl.eval('return$tclVar')

除了通过返回值之外,我还没有找到从python访问Tcl对象的其他方法,但这确实为您提供了一种与Tcl进程接口的方法。此外,您可以将python函数导出到Tcl中,如

No中所述。请阅读我刚才添加到问题中的说明。在这种情况下,不需要使用shell
subprocess.Popen([“tclsh”,“someFile.tcl”])
工作正常。来自Tkinter进口*;根=Tk();root.tk.eval('put[array get tcl_platform]”)@科林-当问题是“能够访问Tcl对象、调用Tcl函数等…”时,您的示例不应该写为在Python中获取对Tcl数组的引用(而不是检索打印内容的字符串表示形式)吗?我只是添加了一个快速注释来告诉您。我还怀疑PythonTcl通信可能必须在传递命令和以字符串形式获取结果的级别上进行,无论如何,我不希望它们能够共享数据结构。