2013-05-03 62 views
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解釋器禁用它。爲什麼Tcl_Interprer以這種方式實現?

這種情況是當我試圖在解釋器中評估exit命令。我期望它應該只銷毀,刪除或禁用解釋器,但它調用關閉整個程序的std::exit,該程序保留了非受控對象。

我知道這種情況可能有解決方法,但我很好奇爲什麼Tcl解釋器以這種方式實現。它只會改變它自己而不是整個程序會更有用。

+0

的Tcl被設計爲節目腳本語言膠 - 這是它的原始設計簡介 - 代碼可能想要做的事情之一是'退出'。如果您不希望「退出」表現得那樣,請刪除或替換該命令; Tcl的內置'exit'實際上只是「標準庫」的一部分(與所有其他命令一樣),並不是那麼特別。 – 2013-05-04 12:00:44

回答

0

如果你想要一個獨立的Tcl子進程,你應該用system("tcl YourScript.tcl")來啓動它。當解釋器在你的過程中運行時,它將作爲你的過程的一部分。

相關問題