为了账号安全,请及时绑定邮箱和手机立即绑定

如何暂停程序?

如何暂停程序?

Go
呼如林 2021-06-18 14:02:30
我想实现pause类似 windows shell command的功能pause。例如,$ go run script.go  Any key to continue...     //Then any key to continue在 windows 上,我们可以通过 golang 函数使用 system 命令exec.Command()。但是在 Linux 上呢?我想将该命令read -n1 -p "Any key to continue"用作妥协的命令,但它在函数中不起作用exec.Command("read", "-n", "1")。我测试了很多,但不知道为什么。另外,有没有人知道如何在不使用外部命令的情况下仅通过golang语言本身来实现暂停功能?
查看完整描述

3 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

只需从标准输入读取。用户必须按回车键才能继续程序。或者将终端设置为“原始”模式。对于后一种情况,例如。nsf的术语箱


查看完整回答
反对 回复 2021-06-28
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

从标准输入中读取一行,然后丢弃它(source):

bio := bufio.NewReader(os.Stdin)
line, hasMoreInLine, err := bio.ReadLine()


查看完整回答
反对 回复 2021-06-28
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我不知道,如果你能做到这一点,如果你没有禁用,除非你uncook然后终端(禁用输入缓冲)>这里是一个简单的解决方案到


这取决于操作系统,以便更好地询问用户按下 Enter 键。您还想捕获诸如Ctrl+Z或 之类的信号Ctrl+C。


c := make(chan os.Signal)

d := make(chan bool)


// Capture Control

signal.Notify(c, os.Interrupt, os.Kill)


//Capture Enter

go func() {

    bio := bufio.NewReader(os.Stdin)

    bio.ReadByte()

    d <- true

}()



fmt.Println("Any key to continue... ")


// Block

select {

    case <- d :

    case <- c :

}


fmt.Println("Mission Completed")


查看完整回答
反对 回复 2021-06-28
  • 3 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信