2017-10-16 71 views
2

我在golang中編寫了一個文本界面,如果在打印時鍵入它,它將干擾所呈現的文本。我知道「的stty -echo」將停止呼應鍵盤的輸出和「stty的回聲」重新啓用它,但是當我寫的功能,如:如何在golang中打印終端時禁用鍵盤

func disableKeyboard() { 
    c := exec.Command("stty -echo") 
    c.Stdout = os.Stdout 
    c.Run() 
} 

func enableKeyboard() { 
    c := exec.Command("stty echo") 
    c.Stdout = os.Stdout 
    c.Run() 
} 

這些對我的節目輸出沒有影響。我發送這些命令的方式有什麼問題嗎?

喜歡的東西:

disableKeyboard() 
time.Sleep(time.Second) 
enableKeyboard() 

不起作用。我目前正在使用一個mac。

+2

當您使用'exec.Command'時,您將分出一個新的後臺進程。它不會影響用戶用來與應用程序交互的TTY。 – Adrian

+0

這就是我在想什麼,有沒有辦法解決這個問題,所以我可以在當前進程中暫時關閉鍵盤? – Rob

+1

也,爲什麼downvote? – Rob

回答

4

crypto/ssh/terminal package(由於某種原因,它不是標準的lib)有代碼可以滿足你的需求,儘管它使用相當低級別的系統調用來實現它。您可能可以將其調整爲您正在嘗試執行的操作(使用syscall.Stdin作爲文件描述符)。正如Flimzy所指出的那樣,儘管這仍然不會禁用鍵盤輸入,但它只是抑制它回到終端,所以如果你以後依賴它,你可能仍然需要刷新輸入。

+0

雖然這很好,但我認爲你完美地捕捉了我的意圖 – Rob