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以这种方式实现。它只会改变自身而不是整个程序会更有用。
答案 0 :(得分:1)
你最好不要在其他地方重定向TCL输出,而不是关闭stdout:
答案 1 :(得分:0)
如果您想要一个独立的Tcl子流程,您应该使用system("tcl YourScript.tcl")
启动它。当解释程序在您的流程中运行时,它将作为您流程的一部分。