Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
C++ 同时支持Tcl和Python?_C++_Python_Api_Tcl - Fatal编程技术网

C++ 同时支持Tcl和Python?

C++ 同时支持Tcl和Python?,c++,python,api,tcl,C++,Python,Api,Tcl,我有一个二进制应用程序,它与Tcl静态链接,前端是Tcl解释器。我想为用户提供使用Python执行相同命令的功能,如关键字选项。Tcl语法的一个示例是: set_foo -foo 1.0 -bar 3.0 -cat x 因此,python等价物可能如下所示: set_foo(foo=1.0, bar=3.0, cat="x") 两次构建程序是否更好,一次作为Tcl应用程序,一次作为Python应用程序?还是将所有内容都保留为Tcl,并在其解释器中使用一个调用Python脚本的命令 这些命令的

我有一个二进制应用程序,它与Tcl静态链接,前端是Tcl解释器。我想为用户提供使用Python执行相同命令的功能,如关键字选项。Tcl语法的一个示例是:

set_foo -foo 1.0 -bar 3.0 -cat x
因此,python等价物可能如下所示:

set_foo(foo=1.0, bar=3.0, cat="x")
两次构建程序是否更好,一次作为Tcl应用程序,一次作为Python应用程序?还是将所有内容都保留为Tcl,并在其解释器中使用一个调用Python脚本的命令

这些命令的实现方式是,它们对所使用的脚本语言一无所知。api是:

void set_fooCmd(Handler &data);

处理程序是一个C++类,它负责解析选项并将其提供给命令实现。到目前为止,该处理程序是为Tcl实现的,而不是为Python实现的

所有直接与Tcl接口的代码都在它自己的目录中,并从程序的其余部分提取调用

更新: 这不是一个重复的问题:

当他们询问是否要从Tcl迁移到Python或Matlab时。我已经知道我想同时支持Tcl和Python,我非常想知道人们使用了什么方法。例如:

  • 从Tcl调用Python解释器
  • 为Python前端和Tcl前端分别编译应用程序
  • 其他一些方法
  • 从Tcl调用Python解释器

    不必要的开销

    然而,Python的
    tkinter
    模块从Python调用Tcl。有一个先例,但引入太多的接口层似乎很复杂

    为Python前端和Tcl前端分别编译应用程序

    这是很常见的。许多项目有多个绑定——Python、Tcl、Perl等

    有一种可能的方法可以稍微简化语言绑定

  • 修复二进制应用程序以处理简单的文本输入和输出。您将从标准输入中读取数据并写入标准输出

  • 编写Python(和Tcl)应用程序,收集参数,将二进制文件作为子流程进行分叉;并将参数写入二进制的stdid,并从二进制的stdout读取结果

  • 从Tcl调用Python解释器

    不必要的开销

    然而,Python的
    tkinter
    模块从Python调用Tcl。有一个先例,但引入太多的接口层似乎很复杂

    为Python前端和Tcl前端分别编译应用程序

    这是很常见的。许多项目有多个绑定——Python、Tcl、Perl等

    有一种可能的方法可以稍微简化语言绑定

  • 修复二进制应用程序以处理简单的文本输入和输出。您将从标准输入中读取数据并写入标准输出

  • 编写Python(和Tcl)应用程序,收集参数,将二进制文件作为子流程进行分叉;并将参数写入二进制的stdid,并从二进制的stdout读取结果


  • 您可能想看看这样的东西,它将允许您创建一个带有straitforward C接口的应用程序(以任何您喜欢的方式实现),并将该接口公开给各种其他脚本语言。SWIG支持Tcl和Python,以及Ruby、PHP、Scheme、Perl,

    您可能想看看类似的东西,它将允许您创建一个具有straitforward C接口(以任何方式实现)的应用程序,并将该接口公开给各种其他脚本语言。SWIG支持Tcl和Python,以及Ruby、PHP、Scheme、Perl,

    Tcl是完全可嵌入的(只要您记得在
    Tcl\u CreateInterp
    之前调用
    Tcl\u FindExecutable
    ),这样您就可以通过使用少量Python代码来准备在同一过程中执行的Tcl脚本。这将是快速和可靠的(多进程的东西需要上下文开关来进行通信,并且有更多的故障模式),并将所需的额外代码量降至最低

    Python唯一的问题是Tcl解释器(即
    Tcl_CreateInterp
    返回的句柄)与当前线程的绑定非常紧密;您无法从其他线程安全地调用它们(因为为了减少全局锁的数量,实现中使用了大量特定于线程的数据)。虽然我们可以讨论不同之处,但一般来说,这只是一种不同的做事方式;只有当你把这些东西连接在一起时,你才真正需要关心。
    如果您的Python代码实际上是单线程的,那么您可以跳过复杂性,直接进入最简单的直接访问;Tcl在一个级别上是不安全的,但在另一个级别上是安全的。

    Tcl是完全可嵌入的(只要您记得在
    Tcl\u CreateInterp
    之前调用
    Tcl\u FindExecutable
    ),这样您就可以通过使用少量Python代码来准备在同一进程中执行的Tcl脚本。这将是快速和可靠的(多进程的东西需要上下文开关来进行通信,并且有更多的故障模式),并将所需的额外代码量降至最低

    Python唯一的问题是Tcl解释器(即
    Tcl_CreateInterp
    返回的句柄)与当前线程的绑定非常紧密;您无法从其他线程安全地调用它们(因为为了减少全局锁的数量,实现中使用了大量特定于线程的数据)。虽然我们可以讨论不同之处,但一般来说,这只是一种不同的做事方式;只有当你把这些东西连接在一起时,你才真正需要关心。 如果您的Python代码实际上是单线程的,那么您可以跳过复杂性,直接进入最简单的直接访问;一级不安全,但另一级安全。

    我想