我正在嘗試學(xué)習(xí)圍棋,我想我會從一個我想做一段時間的項目開始(但它似乎太“繁瑣”而無法打擾)。基本思想是我有一個程序可以在 stdin/stdout 上與用戶交互,我想編寫一個新程序,該程序以相同的方式與程序交互(就好像它是一個運行程序的人一樣)?,F(xiàn)在這里的程序很簡單,因為它是同步的:你輸入一個命令,得到一些輸出,然后它就坐在那里等待下一批輸入。這看起來并不難,但我很難讓這個 I/O 框架正常工作。package mainimport ( "os/exec" "time" "bufio" "math/rand" "fmt" "strings")func main() { cmd := exec.Command("e") // A simple program that echos input until it becomes "exit" progin, err := cmd.StdoutPipe() if err != nil { fmt.Println("Trouble with e's stdout") panic(err) } err = cmd.Start() if err != nil { fmt.Println("Trouble starting e") panic(err) } r := rand.New(rand.NewSource(99)) buf := bufio.NewReader(progin) for { // Write stuff var toProg string if (r.Float64() < .1) { toProg = "exit" } else { toProg = fmt.Sprintf("%d", r.Int) } fmt.Println("Printing: ", toProg) cmd.Stdin = strings.NewReader(toProg + "\n") // Read stuff time.Sleep(500 * time.Millisecond) // give the program time to generate output input, err := buf.ReadString('\n') if err != nil { fmt.Println("I did *not* like that: ", input) panic(err) } fmt.Println("Received: ", input) }}有接班人嗎?
2 回答

慕仙森
TA貢獻1827條經(jīng)驗 獲得超8個贊
你是在重新發(fā)明輪子,你想做的一切都可以由fmt包處理,所以只需使用它并在需要的地方添加額外的東西,比如隨機數(shù)檢查器。
以下是如何輕松實現(xiàn)此目標的示例:http : //play.golang.org/p/b9GnovSRFj
快速瀏覽一下,該策略的主要功能:
var s string
_, err := fmt.Scanf("%s", &s)
if err != nil {
log.Fatal(err)
}
fmt.Println(s)
請注意,由于權(quán)限問題,它不會在操場上運行,但如果您在本地運行它,它應(yīng)該可以正常工作。
- 2 回答
- 0 關(guān)注
- 258 瀏覽
添加回答
舉報
0/150
提交
取消