標準入出力を処理するプログラムを開発するとき、次のような基準で動作を区別するアプリケーションに遭遇することがあります。入力は端末 (TTY) またはパイプから来ています。これを防ぐには、TTY を模倣するようにプログラムを構成します。
解決策:
Go では、次のコードを利用して、TTY を模倣するプログラムを作成できます。 TTY になる:
package main import ( "fmt" "io" "log" "os/exec" ) func main() { // Get the command to execute cmd := exec.Command("your-command") // Create a pipe to capture the output stdout, err := cmd.StdoutPipe() if err != nil { log.Fatal(err) } // Start the command if err := cmd.Start(); err != nil { log.Fatal(err) } // Continuously read from the output pipe go func() { for { buf := make([]byte, 1024) n, err := stdout.Read(buf) if err != io.EOF { if err != nil { log.Print(err) } continue } fmt.Print(string(buf[:n])) } }() // Wait for the command to finish if err := cmd.Wait(); err != nil { log.Fatal(err) } }
どうやって動作:
このコードは、指定されたコマンド ('your-command') を開始し、その出力をバッファーにパイプします。次に、出力を継続的に読み取って出力するゴルーチンを設定し、TTY の動作をシミュレートします。プログラムはコマンドが終了するのを待ってから終了します。
以上がGo でターミナル (TTY) をプログラム的にシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。