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 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥15 使用LM2596制作降压电路,一个能运行,一个不能
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路
  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错