知道任何将Python与Tcl进行接口的创造性方法吗?

18

这是情况。我工作的公司有很多现有的Tcl代码,但有些人想开始使用Python。能够重用一些现有的Tcl代码会很好,因为那是已经花费的钱。此外,一些测试设备只有Tcl的API。

所以,我考虑的其中一种方法是使用subprocess模块调用一些Tcl脚本。

  • subprocess是最好的选择吗?
  • 是否有人使用过这个相当新的代码: Plumage? 如果使用了,您的经验如何(不仅限于Tk)?
  • 还有其他可能的方法吗?
3个回答

19

我希望你准备好了。标准Python。

import Tkinter
tclsh = Tkinter.Tcl()
tclsh.eval("""
    proc unknown args {puts "Hello World!"}
    }"!dlroW olleH" stup{ sgra nwonknu corp
""")

针对评论进行编辑:Python的tcl解释器不知道其他已安装的tcl组件。您可以通过以通常的方式将扩展添加到实际使用的tcl python中来解决此问题。这里是一个详细说明链接


经过这一切,你是否明白了一个要点,即加载所需的二进制文件以使扩展正常工作通常是快速完成的? - Cameron Laird
你能解释一下你的tcl示例吗?我对不平衡的引号和反向命令感到困惑。 - lalala
@lalala:我似乎找不到那个问题,它是一个回文,可以打印“hello world”,而不使用注释。 - SingleNegationElimination
我也真正意味着命令而不是注释。你写的是“stup”,这是puts的反向,但我刚开始学习tcl,发现这很令人困惑。 - lalala
@lalala:看起来我正在思考的问题已经消失了,因为它不适合这个网站的主题。它足够接近主题,我在这里重新创建了我的答案:https://codegolf.stackexchange.com/a/135028/72575 - SingleNegationElimination
显示剩余3条评论

3

这可以完成。

http://wiki.tcl.tk/13312

请特别关注Typcl扩展。

Typcl有点奇怪...它是一个扩展,用于从Python中使用Tcl。 它并不真正需要CriTcl,可以在标准C中完成。

此代码演示了如何使用Tcl作为共享库,并在运行时连接到它 (Tcl的存根结构使其非常简单)。 此外,Typcl在可能的情况下避免字符串转换(双向)。


有趣。 我理解这是针对Unix系统,而不是Windows? - Jay Atkinson
是的和不是的:我只知道Typcl在Unix下,但它的所有部分都是跨平台的;如果稍微“相对化”路径可能就足以让它在Windows下运行。无论如何,已经提到的维基页面指向了其他已在Windows下使用的此主题变体。 - Cameron Laird

0

我认为这是用于将C或C++代码与高级语言进行封装的。 - Jay Atkinson
正确:可以使用SWIG构建解决方案,但它不像“import Tkinter”或类似Typcl项目那样直接。 - Cameron Laird

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接