2017-10-16 7 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

関連する問題