为什么以这种方式实现Tcl_Interprer?

时间:2013-05-03 11:56:20

标签: c++ tcl implementation

int main() {
    Tcl_Interp *interp = Tcl_CreateInterp(); 

    Tcl_Eval(interp, "close stdout");
    Tcl_Eval(interp, "puts hello");

    std::cout << "other output" << std::endl;
}

我有一个使用Tcl_Interpreter的程序。我不想在stdout中看到它的输出,所以我正在关闭它。但它会关闭整个程序的标准输出,"other output"也不会显示。我的程序可能有很多其他输出。为什么Tcl解释器禁用它。

这种情况是我试图在解释器中评估exit命令的时候。我希望它只应该销毁,删除或禁用解释器,但它调用std::exit来关闭整个程序,它保留了不受欢迎的对象。

我知道这种情况可能有变通方法,但我很好奇为什么Tcl Interpreter以这种方式实现。它只会改变自身而不是整个程序会更有用。

2 个答案:

答案 0 :(得分:1)

你最好不要在其他地方重定向TCL输出,而不是关闭stdout:

答案 1 :(得分:0)

如果您想要一个独立的Tcl子流程,您应该使用system("tcl YourScript.tcl")启动它。当解释程序在您的流程中运行时,它将作为您流程的一部分。