【发布时间】:2011-02-11 17:09:04
【问题描述】:
我有一堆 Python 函数。我们称它们为
foo、bar和baz。它们接受可变数量的字符串参数并执行其他复杂的操作(例如访问网络)。我希望“用户”(假设他只熟悉 Tcl)使用这些函数在 Tcl 中编写脚本。
这是用户可以提出的示例(取自Macports):
post-configure {
if {[variant_isset universal]} {
set conflags ""
foreach arch ${configure.universal_archs} {
if {${arch} == "i386"} {append conflags "x86 "} else {
if {${arch} == "ppc64"} {append conflags "ppc_64 "} else {
append conflags ${arch} " "
}
}
}
set profiles [exec find ${worksrcpath} -name "*.pro"]
foreach profile ${profiles} {
reinplace -E "s|^(CONFIG\[ \\t].*)|\\1 ${conflags}|" ${profile}
# Cures an isolated case
system "cd ${worksrcpath}/designer && \
${qt_dir}/bin/qmake -spec ${qt_dir}/mkspecs/macx-g++ -macx \
-o Makefile python.pro"
}
}
}
这里,variant_issset、reinplace 等等(Tcl 内置函数除外)被实现为 Python 函数。 if、foreach、set 等是普通的 Tcl 构造。 post-configure 是一个 Python 函数,它接受一个可以稍后执行的 Tcl 代码块(这显然最终会调用上述 Python“函数”)。
这可以在 Python 中实现吗?如果有,怎么做?
from Tkinter import *; root= Tk(); root.tk.eval('puts [array get tcl_platform]') 是我所知道的唯一集成,显然非常有限(更不用说它在 mac 上启动 X11 服务器的事实)。
【问题讨论】:
-
并非所有 Tk 版本都在 OSX 上启动 X11。改用该库的 Carbon(或 Cocoa)目标构建...
-
@Donal,重点是 - 它会打开一些 GUI 窗口。如果不是 X11,我会在 Dock 中看到一个跳跃的 Python 火箭图标,然后是一个标题为“tk”的窗口。这对于与 GUI 无关的应用程序来说是不希望的。
-
我怀疑这可能会发生。毕竟没有声称这是一个答案。
-
你可以像这样在不加载 Tk 的情况下使用 tcl 解释器: import Tkinter tcl = Tkinter.Tcl() result = tcl.eval(''' puts hello, world ''')
标签: python integration tcl dsl