在开发处理标准输入和输出的程序时,您可能会遇到一些应用程序,这些应用程序会根据是否输入来自终端 (TTY) 或管道。为了防止这种情况,您可以将程序配置为模仿 TTY。
解决方案:
在 Go 中,您可以利用以下代码创建一个程序来假装成为 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')并将其输出通过管道传输到缓冲区。然后它设置一个 goroutine 来连续读取和打印输出,模拟 TTY 的行为。程序等待命令完成后再退出。
以上是如何在 Go 中以编程方式模拟终端 (TTY)?的详细内容。更多信息请关注PHP中文网其他相关文章!