douyi0219 2017-10-23 06:19
浏览 62
已采纳

在Go中管道命令时从控制台读取

I need a way to read input from console twice (1 -from cat outupt, 2 - user inputs password), like this: cat ./test_data/test.txt | app account import

My current code skips password input:

reader := bufio.NewReader(os.Stdin)
raw, err := ioutil.ReadAll(reader)
if err != nil {
    return cli.NewExitError(err.Error(), 1)
}

wlt, err := wallet.Deserialize(string(raw))
if err != nil {
    return cli.NewExitError(err.Error(), 1)
}

fmt.Print("Enter password: ")
pass := ""
fmt.Fscanln(reader, &pass)

Also tried to read password with Scanln - doesn't works.

Note: cat (and piping at all) can't be used with user input, as shell redirects inputs totally. So the most simple solutions are:

  • to pass filename as argument

  • redirect manually app account import < ./test.txt

  • 写回答

1条回答 默认 最新

  • douzhang5295 2017-10-23 08:01
    关注

    Read file and password separately (and don't show password), try this:

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "log"
    
        "github.com/howeyc/gopass"
    )
    
    func main() {
        b, err := ioutil.ReadFile("./test_data/test.txt") // just pass the file name
        if err != nil {
            fmt.Print(err)
        }
        fmt.Println(string(b))
    
        fmt.Print("Password: ")
        pass, err := gopass.GetPasswd()
        if err != nil {
            log.Fatalln(err)
        }
        fmt.Println(string(pass))
    }
    

    and go get github.com/howeyc/gopass first.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探