0
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. 我不想在标准输出中看到它的输出,所以我要关闭它。但它会关闭整个程序的标准输出,"other output"也不会显示。我的程序可能有很多其他输出。为什么 Tcl 解释器禁用它。

这种情况是当我试图exit在解释器中评估命令时。我希望它应该只销毁、删除或禁用解释器,但它正在调用std::exit关闭整个程序,它保留未破坏的对象。

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

4

2 回答 2

1

您最好将 TCL 输出重定向到其他地方,而不是关闭标准输出:

于 2013-05-03T14:03:10.873 回答
0

如果你想要一个独立的 Tcl 子进程,你应该以system("tcl YourScript.tcl"). 当解释器在您的进程中运行时,它充当您的进程的一部分。

于 2013-05-03T13:40:22.397 回答